1

私は非常に奇妙な問題を抱えています。バックボーンコレクションがあり、whereメソッドを使用して、特定の属性に一致するコレクション内のモデルを検索しています。私の問題は、結果の不一致です。

ユーザーが参加した目標を追跡するjoinedGoalListがあります。このコレクションにIDが1と3の2つの目標が含まれているとします。ユーザーが/goals/ 3にアクセスすると、ユーザーが目標に参加したことを示すメッセージが表示されます。

/goals/3にアクセスしているときに問題が発生し、メッセージが表示される時間の半分と、メッセージが表示されない時間の残りの半分があります。

奇妙なことに、この問題はリモートサーバーでのみ発生し、ローカルホストでは発生しません。

私のコードでは、joinedGoalListに3のIDを照会し、一致する場合は、matches配列が0より大きくなければならないことがわかっているので、ユーザーがゴールに参加したことを示すメッセージをレンダリングします。

コードは次のとおりです(joinedGoalListはバックボーンコレクションです:

  console.log(joinedGoalList);
  var matches = joinedGoalList.where({id: this.model.get("id")});
  console.log(matches);
  console.log(matches.length);
  if (matches.length > 0) {
    console.log("the matches length is > 0");
    this.renderLeaveGoal();
  } else {
    console.log("the matches length is 0");
    this.renderJoinGoal();
  }

これがの結果ですconsole.log(joinedGoalList)、これが結果です(それらは一貫しています):

child
_byCid: Object
_byId: Object
_callbacks: Object
length: 2
models: Array[2]
__proto__: ctor

ご覧のとおり、長さは2です。一方のオブジェクトのIDは1で、もう一方のオブジェクトのIDは3です。これはページの読み込み全体で一貫しています。

IDが3のオブジェクトの配列で一致を実行すると、不整合が発生します。一部のページの読み込みでは一致が検出されますが、他のページの読み込みでは一致が検出されません。

の結果はconsole.log(matches.length)、リモートサーバーでは0または1ですが、ローカルホストでは常に1です。

4

1 に答える 1

1

イベントのシーケンスは次のようになると確信しています。

  1. fetchコレクションを呼び出して、サーバーからデータをロードします。
  2. あなたが呼ぶconsole.log(joinedGoalList)、これはいくつかのブラウザでは非同期です。
  3. 呼び出しjoinedGoalList.whereて、空のコレクションを見つけます。
  4. 1からのfetch呼び出しが返され、コレクションにデータが入力されます。
  5. 2からのconsole.log呼び出しが実行され、入力されたコレクションが出力されます。この呼び出しにはへの参照があり、その参照は入力されたコレクションを指します。joinedGoalList

これをローカルで行うと、4のAJAXfetch非常に迅速に戻るため、ステップ4は3の前に実行され、すべてが期待どおりに動作します。

ここにはいくつかのオプションがあります。

  1. fetchsuccessコールバックがあります:

    オプションのハッシュはsuccess、引数としてerror渡されるコールバックを取ります。(collection, response)

    したがって、コールバックを使用して、サーバーが応答し、コレクションにデータが入力されるまで、success呼び出しているものを遅らせることができます。where

  2. fetchコレクションをリセットします。

    モデルデータがサーバーから返されると、コレクションはリセットされます。

    そしてreset_

    コレクションをモデルの新しいリスト(または属性ハッシュ)に置き換え、最後に単一の"reset"イベントをトリガーします。

    したがって、イベントをリッスンし、その"reset"イベントを使用して、呼び出しているものをトリガーすることができますwhere

于 2012-05-02T17:45:27.737 に答える