0

each現在、バックボーンコレクションのメソッドを使用すると、非常に異常な動作が発生します。私のアプリでは、ユーザーが既存のモデルを編集できるようにします。これには、そのモデルの編集といくつかの時間制約の追加が含まれます。モデルとその時間制約は、BackboneRelationalにリンクされています。ユーザーがクリックして新しい時間制約を追加するたびに、TimeConstraintモデルを保存せずにリレーションシップに追加します。その後、ユーザーが編集をキャンセルすることを決定した場合は、すべての新規/未保存のTimeConstraintsをリレーションシップから削除する必要があります。ただし、コレクションをループしていると、最後の反復が実行されていないようです。

ここでこの動作を示すためにjsfiddleを作成しました:http://jsfiddle.net/richardstokes/ZzFgZ/9/

従う手順は次のとおりです。

  1. 「ポリシーの編集」をクリックします
  2. [新しい時間制約]ボタンを使用して、2つ以上の新しい時間制約を追加します
  3. [編集のキャンセル]をクリックして編集をキャンセルします

コンソールは、time_constraintsコレクションの開始長と終了長、および保存されていないモデルを削除した後の中間の長さを出力します。それらがすべて新しい/保存されていない場合でも、それは常に短く止まり、コレクションに1つのアイテムを残すように見えます。

誰かがこの問題で私を助けてくれるなら、私は大いに感謝します、それは私が文字通り一日中立ち往生していたことです。

4

1 に答える 1

1

timeConstraintsのコレクションが繰り返されているため、アイテムを削除しています。これにより、未定義の動作が発生する可能性があります。最初に新しいtimeConstraintsのリストを取得してから、それらを配列としてremove()に渡してみてください。

var toRemove = this.model.get('time_constraints').filter(function (timeConstraint) {
    return timeConstraint.isNew();
});
this.model.get('time_constraints').remove(toRemove);
于 2012-11-01T22:03:19.550 に答える