1

フォーカスを失ったとき、またはユーザーがEnterキーを押したときに、テキストフィールドの値がモデルに保存されるtodoリストをシミュレートしています。

//view etc.
events:{
    "blur .task": "doneEditing",
    "keypress .task": "doneEditing"
},
doneEditing: function(e){
    if(e.which && e.which != 13) return;
    e.preventDefault();
    //model saving code
}

問題は、キーを押してエンターすると doneEditing がトリガーされ、その後ぼかしが発生して doneEditing が再びトリガーされることです。回避策を見つけるために少しのトリックを使用できますが、バックボーンにいずれかのイベントの 1 つだけをトリガーする方法があるかどうか疑問に思っていました。

ありがとう。

4

2 に答える 2

2

これらの 2 つのイベントが短い時間間隔で発生する場合は、underscore.jsライブラリの (バックボーンのハード依存関係なので、とにかくそれを使用します)メソッドを使用throttleして、短い連続であまりにも多くの呼び出しを停止できます。ドキュメントへのリンクは次のとおりです。

そして例:

doneEditing: _.throttle(function(e) {
  // Copy your event handling here
}, 100), // The number here defines the time threshold within which the function can be called only once

うまくいけば、それは役に立ちました!

于 2012-06-29T14:28:54.317 に答える
0

を使用するe.stopPropagation()か、単に返す(これは jQuery の時点でと のfalse両方を呼び出しますpreventDefault) 。stopPropagationDOM イベントの伝播は Backbone の範囲を超えており、そのような単純なことにはヘルパーは必要ありません。

于 2012-06-29T14:08:50.600 に答える