2011-10-10 55 views
0

我試圖將更改事件綁定到模型,但不起作用。這裏是鏈接:http://jsfiddle.net/kahhor/jp4B6/2/。我想,我犯了一個愚蠢的錯誤,我無法弄清楚。在backbone.js中將更改事件綁定到模型

我認爲問題是,這是兩種不同的觀點......

對不起,在新Backbone.js的,只是學習:)

感謝,

更新:我改變我打電話的意見和模型的方式:

/* MODELS */ 
    var PopupM    = new PopupModel(); 
    var TaskbarM   = new TaskbarModel(); 
    var LeftNotificationM = new LeftNotificationModel(); 
    /* /MODELS */ 

    window.PopupView = new PopupView({model: PopupM, LeftNotificationModel: LeftNotificationM}); 

    window.TaskbarView = new TaskbarView({model: TaskbarM}); 
    window.TaskbarView.loadTaskbar(); 

    window.LeftNotificationView = new LeftNotificationView({model: LeftNotificationM}); 
    window.LeftNotificationView.loadLeftNotification(); 

一切工作正常,除了當我呼籲decrementNotification()
此錯誤消息顯示在Firebug:

this.LeftNotificationModel is undefined 
    this.LeftNotificationModel.decrementNotification(); 

但我已經聲明在這裏:

window.PopupView = new PopupView({model: PopupM, LeftNotificationModel: LeftNotificationM}); 

我在做什麼錯在這裏? :(

回答

3

我看到它的方式要改變,我不太清楚PopupModel應該做基於一個模型。

狀態的兩種觀點的行爲,所以我省略了。

從本質上講,你要的選項參數中創建一個模型LeftNotificationModel並傳遞至兩個意見

var my_model = new LeftNotificationModel(); 

window.LeftNotificationView = new LeftNotificationView({ model: my_model}); 
window.LeftNotificationView.render(); 
window.PopupView = new PopupView({ model: my_model}); 
window.PopupView.render(); 

見的jsfiddle正在運行的例子:http://jsfiddle.net/dj4cp/1/

+4

+1的慣用方法模型/視圖是你將模型傳遞給視圖。你實際上並沒有在視圖內創建它們。 OP的例子說明了原因。在BB中共享相同的數據是很常見的。最常見的情況是,列表視圖具有模型集合(模型),而項目視圖具有所收集項目的模型......最終有一個引用返回它所屬的集合。儘管如此,視圖通過其他方式(比模型)進行通信也很常見,例如事件聚合器在特定的視圖中進行查看時。 –

+0

謝謝,我吸取了我的教訓:))我看到了時間的例子,在視圖內創建模型對象的copuple,我認爲這是它的方式,假設是......但它工作得很好,問題是我也必須包含PopupModel,所以我猜是因爲它給了我錯誤,我加入了這個問題。 – kaha

1

在回答您的編輯,這確實是一個新的問題:

不要忘記綁定decrementNotification到對象:

initialize: function() { 
    _.bindAll(this, "decrementNotification"); 
} 
+0

我試過了,但沒有奏效。正如你可以看到它沒有顯示'decrementNotification是未定義的'它顯示'LeftNotificationModel是未定義的......我試過,就像這樣:'window.PopupView = new PopupView({model:PopupM,'LeftNotificationModel':LeftNotificationM} );'帶有引號,但由於某種原因仍然無法看到它。 – kaha

+0

我應該爲它開新的問題嗎? – kaha

+0

@kaha我想你會誤解「bindAll」的作用。它將函數的上下文綁定到對象。 'LeftNotificationModel'可能未定義,因爲'this'是錯誤的。這一切都與Javascript上下文模型與函數的工作方式有關。無論如何,你可以用你的新問題創建一個新的jsFiddle並用它創建一個新的問題嗎? (看到這是一個新問題,不太可能與原來的問題有關)謝謝:) –

相關問題