簡體   English   中英

如何判斷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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM