2011-04-12 94 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一起。坚持事件;这就是他们的目标。