2011-04-12 101 views

回答

10

將視圖添加到模型的屬性是一個禁忌。

爲什麼你需要訪問模型中的視圖來改變它?

在你看來,只需綁定:

this.model.bind('change', this.modelChanged, this) // (event, function, context) 

,並從現在起,當你的模式的轉變,你的觀點的modelChanged方法將被自動調用。


>0.9版本中,正確的語法會是這樣的觀點。

this.model.on('change', this.modelChanged, this) // (event, function, context) 
+0

謝謝你的教學:)如果我做你的代碼,我得到:Uncaught TypeError:Object [對象DOMWindow]沒有方法「更改」。在http://www.ichbinadrian.ch/map/stackoverflow你可以看看代碼。我正在原型設計和學習:) – thgie 2011-04-13 13:46:59

+1

嘗試調試'this.view'返回的內容。這是一個很大的代碼,如果你能把它縮小到基本部分,這將是非常有用的。 – pawlik 2011-04-13 22:36:59

1

您可以使用兩個綁定之一:

this.model.bind('change', this.modelChanged) 

this.model.bind('refresh', this.modelRefreshed) 

檢查文檔看到的差異。

1

還有一個潛在的困難是將view屬性添加到模型中。模型可能由多個視圖表示。發生這種情況時,您必須將view屬性更改爲(數組)views。這很難編碼。我開始只做這件事,一旦我看到可能涉及多個視圖,就意識到我的失禮。我意識到這只是處理髮布者 - 訂閱者模式的另一種方式。

其他人一直很樂意將模型和視圖引用作爲雙向通信的手段。 Gravel-Niquet在他的Todos示例應用程序中這樣做。 Lerner在他2011年6月發表的關於Backbone.js的Linux期刊文章中提到了這一點。也許是偏好的問題,但我與pawlik一起。堅持事件;這就是他們的目標。