2011-10-03 21 views

回答

14

和大多數Backbone.js一樣,你不會得到一個「正確的」答案,但我可以分享我是如何做到的。對於模型和視圖,我通常遵循以下指導原則:

  • 視圖和模型應該由對其「負責」的組件實例化。對於具有明確的父/子關係的模型或視圖,父模型應該實例化,通常在initialize()方法中。

  • 父母應該在實例化時綁定到子事件。

  • 父母應該「意識到」孩子,並且可以在必要時調用子方法 - 我通常會使用此方法來觸發子事件,因爲它更加明確。我儘量讓孩子獨立於父母,通過事件向上溝通。所以是的,深度嵌套模型會通過事件鏈進行溝通。

  • 我有時候會把.set()作爲骨幹屬性,但通常只是使用簡單的Javascript屬性(例如this.child)。這取決於上下文。使用Backbone屬性提供了change事件,因此如果您需要監視孩子是否更改,請使用這些。骨幹屬性還使您能夠設置實例化時間,例如var myModel = new Model({ other: otherModel }) - 但是由於父母通常實例化他們的孩子,這並不適用於這種情況,我通常將該模式用於非等級模型 - 模型關係。在大多數情況下,我將孩子設置爲簡單的Javascript屬性。

+0

很好的答案。明白,有不止一個規範的最佳方法 –

3

我真的很喜歡@nrabinowitz的答案。他涵蓋了所有正確的細節。

只是想折騰出使用類似Backbone.Relational處理所有這些東西對你的想法:https://github.com/PaulUithol/Backbone-relational

+0

我最終有類似的問題,這個主幹問題,任何想法?我想我可能會期望自動創建的模型有不同的行爲? http://stackoverflow.com/questions/7685791/backbone-relational-events-not-firing – boom