2013-06-04 51 views
0

我有一個表示用戶輸入的Backbone.Model。在UI回調中,我使用xxx.set()更新模型對象的屬性。該Backbone.View經理監聽改變事件如下:引導程序在模型更改時觸發兩次事件 - 「更改」和「更改:模型屬性名稱」

// create view viewObj with a new model instance modObj 
this.listenTo(this.modObj, "all", function() { 
       alert("event! from FBox: " + arguments[0] + "; arg2=" + arguments[2]) }); 

我所期待的一個,但實際上有兩個回調時在屏幕上的東西,說一個下拉列表中,被改變了。

1. change:name-of-changed-model-attribute 
2. change 

這是要預期和處理的東西,還是我需要修復的偵聽方法?我想避免必須單獨鍵入所有事件名稱,因爲這意味着代碼維護太多。

謝謝。

回答

1

出現這種情況,是因爲骨幹觸發改變兩個事件「變」與「變化:[屬性]」

從主幹源代碼:

if (!silent) { 
    if (changes.length) this._pending = true; 
    for (var i = 0, l = changes.length; i < l; i++) { 
     this.trigger('change:' + changes[i], this, current[changes[i]], options); 
    } 
    } 
    .... 
    if (!silent) { 
    while (this._pending) { 
     this._pending = false; 
     this.trigger('change', this, options); 
    } 
    } 
1

是的,這是由設計。

如果您想在更改某些內容時更新用戶界面,則可以只收聽"change"事件,而不是"all"