[英]How can I tell which model changed when listening to the change event of a collection in backbone.js
[英]How can I tell if a model has not been changed in Backbone.js?
這可能是因為誤用了組件,但我不這么認為。 我有一個問題,View在Backbone JS中更新模型並調用模型的Set方法,以便它可以驗證它的輸入。 從理論上講,這種行為有兩個結果:錯誤和變化。 兩項活動均按規定運作。 但實際上還有第三個事件:沒有變化。 也就是說,如果輸入完全沒有改變,我在調用Set之后無法判斷,因為不會拋出任何錯誤,也不會發生更改事件,因為沒有實際改變 - 但我仍然想知道這樣的情況。 有沒有辦法讓我這樣做?
原因是只有在沒有錯誤發生的情況下才會執行我想要執行的操作,但是我無法知道(沒有更改事件)模型已嘗試設置新值並且沒有結果,因為它全部異步發生。
謝謝!
每個Backbone模型都有一個hasChanged
方法 :
hasChanged
model.hasChanged([attribute])
自上次
"change"
事件以來模型是否已"change"
? 如果傳遞了屬性 ,則在特定屬性發生更改時返回true
。
也許你可以用它來檢查你的第三種可能性。
順便說一句,回調不是異步的。 觸發錯誤和更改的回調並在set
返回之前返回 :
set : function(attrs, options) {
//...
// Run validation.
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
//...
// Update attributes.
for (var attr in attrs) {
var val = attrs[attr];
if (!_.isEqual(now[attr], val)) {
now[attr] = val;
delete escaped[attr];
this._changed = true;
if (!options.silent) this.trigger('change:' + attr, this, val, options);
}
}
_performValidation
調用觸發錯誤回調, this.trigger
調用將調用每個屬性的回調。
在這種情況下,你可能需要在Model.set()
附近Model.set()
一點點才能到達你想要的位置。 如果您正在使用此功能,那么您應該已在模型上定義了validate()
方法。
http://documentcloud.github.com/backbone/#Model-validate
所以你可以直接調用這個方法......
// something happens and we need to update the model to "newvalues"
if (model.validate(newvalues)) {
model.trigger('error')
} else {
model.trigger('change')
}
model.set(newvalues)
這樣,即使它是相同的,你也總是至少得到“改變”或“錯誤”。 您還將從set中獲取現有事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.