2013-05-21 77 views
1

我有以下工作代碼,我正打算更換object.on電話與object.listenTo電話:骨幹listenTo不工作

setField: function(field) { 
    if (this.field) this.field.off(null, null, this); 

    if (field) { 
    this.field = field; 
    this.field.on('validate', this.renderErrors, this); 
    } 
    return this; 
}, 

,這是新版本

setField: function(field) { 
    if (this.field) this.stopListening(this.field); 

    if (field) { 
    this.field = field; 
    this.listenTo(this.field, 'validate', this.renderErrors); 
    } 
    return this; 
}, 

但有些如何不起作用。沒有使用第二個版本調用this.renderErrors方法。

奇怪的是我更新了我的應用程序的其餘部分,因此沒有任何問題。

我敢肯定,我一定會有一些非常愚蠢的東西,我錯過了。

順便說一句,這是使用的領域,以提高

[...] 
    this.trigger('validate', this.errors); 

    this.error = !this.isValid(); 
    return this.errors; 
}, 

回答

1

我終於找到了問題的原因

我正在破壞與setField方法的視圖(其中發佈了採用listenTo,而不是當連接到它的所有事件只是object.on)。

這是我自己的代碼中的錯誤,所以listenTo工程確定

離開這個問題打開的情況下,有人想找到如何從observee.on遷移到observer.listenTo

3

我沒有使用過的新listenTo和的stopListening但該事件的代碼,但我可以看到,在新的版本中,你調用的stopListening對參數field,這意味着你的觀點依然是聽先前可見this.field

setField: function(field) { 
    if (this.field) this.stopListening(field); 

現有版本上0123調用。

嘗試使用:

if (this.field) this.stopListening(this.field);

+0

好點的例子!我會試一試,然後我會告訴你 – opensas

+0

我解決了你指出的問題(也更新了問題),但問題仍然存在......任何其他的想法? – opensas

+0

你是否看到一個事件被解僱?就像你要通過瀏覽器控制檯手動添加偵聽器一樣? – damienc88