2017-01-30 3 views
0

新しいマイクロAPIベースのWebサイトをブートストラップするのが非常に簡単で高速であるため、まだバックボーンを使用しています。コレクションのタイトルをクリックすると、Backbonejsレンダリングのコレクションが表示されます。

質問は、コレクションのグループをクリックしたときのコレクションの読み込みとレンダリングについてのベストプラクティスです。

私はブランドの静的なリストを持っていると言います。ブランドをクリックするとコレクションの取得が開始され、最後に取得が成功するとコレクションがレンダリングされます。

前のクリックが処理されていないブランドをユーザーがクリックすると問題が発生します。その場合、2つのブランドがロードされてレンダリングされます。これを処理して最初のフェッチを "キャンセル"するか無視し、最後に表示したものだけをレンダリングするにはどうすればよいでしょうか?

解決策は、リクエストが処理されるまでブランドリストを非アクティブ化するだけですが、ユーザーが結果を待たずにすぐに別のものをクリックしたいと思うかもしれないため、UXを迷惑にします(たとえば、

+1

バックボーンが最も適しています。同時に2つのコレクションをロードする際に問題が発生すべきではありません。しかし、あなたが解決策を判断することはできません。 –

+0

また、作業コードスニペットを改善する方法についてのヒントが必要な場合は、[codereview.stackexchange.com](http://codereview.stackexchange.com/)を参照してください。 –

答えて

0

から返される基になるxhrオブジェクトには、現在の要求をキャンセルする能力があります。xhr.abort()

ユーザーがクリックしてコレクションがフェッチされると、戻り値を保存します。

var xhr = myCollection.fetch()

xhrはあなたの要求の現在の状態を伝える性質を有します。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState

ユーザーが再びクリックすると、別の要求がまだ処理されている間、それはリクエストの真ん中にいた場合、単にxhrを尋ねるフェッチするコレクションが発生した場合

。存在する場合は、現在のフェッチを中止して続行し、 xhrオブジェクトを再割り当てします。

サンプルコード:あなたはxhrオブジェクトへの参照を保存する方法

function userClickedSomething(){ 
    if(xhr.readyState > 0 && xhr.readyState < 4) 
     xhr.abort() 
    xhr = myCollection.fetch() 
} 

はあなた次第です。

詳細:アプリのすべての部分が成分である場合Is it possible to stop Backbone "read" requests

+0

根底にあるxhrは '' jhXXRR''(http://api.jquery.com/jQuery.ajax/#jqXHR)で、 'XMLHttpRequest'との下位互換性のために' readyState'を公開しています。 [Promise](http://api.jquery.com/Types/#Promise)インターフェースを実装しています。これはリクエストの状態を確認するためのより良い方法です:['.state()'](http:// api .jquery.com/deferred.state /)。 'readyState'のようなマジックナンバーではなく、比較する文字列を返します。 –

関連する問題