无法在Backbone.Marionette中收听从一个视图到另一个视图的事件

时间:2013-08-23 13:58:27

标签: backbone.js marionette backbone-views backbone-events

我正在尝试将代码从现有主干端口移植到backbone.Marionette应用程序。请参阅以下网址以了解我已启动的应用程序。 http://www.adobe.com/devnet/html5/articles/backbone-cellar-pt1.html

根据我的代码结构, 我的代码中有2个视图。

  1. 带有表单的ItemView
  2. 包含每个li标签的itemView列表的复合视图。
  3. 最初在页面加载时,它使用fetch()调用从db渲染数据,并将所有葡萄酒名称附加到侧栏。然后,在每个葡萄酒名称上单击,我可以查看其相应的详细信息。 我的疑问是,除了从表单itemView到CompositeView的监听器之外,一切都有效。我将简要解释一下。

    当我在表单ItemView中更新/删除时,通过监听事件绑定器不会更新/删除CompositeView中的特定li。如果我使用localstorage但不是基于服务器/数据库的应用程序,它的工作原理。 我应该怎样做才能让监听器从表单itemView中监听更改并进行渲染。任何建议都会帮助我继续发展。

1 个答案:

答案 0 :(得分:1)

使用Marionette CompositeView时,将为您完成重新渲染。您不需要为模型或集合添加侦听器,因为Marionette会自动侦听这些事件。

如果这没有解决您的问题,请将您的代码放在jsfiddle上,以便我们有一个非工作代码的功能示例。

基于jsFiddle进行编辑:

我添加的代码应该让您的示例正常运行(如果没有功能示例,很难确定):http://jsfiddle.net/VvXDs/基本上,我添加了应用级消息,然后收听对于它,必要时触发render的列表。虽然这是有用的,但这种模式肯定会引起问题。

让您的生活变得更加复杂的主要因素是,您正在管理路由,就像应用程序是无状态Web应用程序一样(此处更多信息http://lostechies.com/derickbailey/2011/08/03/stop-using-backbone-as-if-it-were-a-stateless-web-server/)。

发生的事情是,您拥有一个包含所有巧克力的集合,并且用户点击链接以显示其中一个巧克力。然后,虽然您已有数据,但您需要从服务器获取要显示的模型的 new 实例。很明显,听众不会工作:他们在同一模型(服务器端)的2个不同实例(客户端)上定义。 (如果您担心陈旧数据,则应该将相同的模型实例传递给视图,并在该实例上调用fetch来更新数据。)

更好的设计方法是在菜单的表单视图中使用相同的客户端模型实例。然后,当模型更改时,菜单行项将自动更新(因为他们使用相同的模型实例,因此"更改"事件监听器将正确地说出来。)

如果您有兴趣了解有关以有状态方式使用路由的更多信息,请查看免费样本到我的书http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf(章节"实施路由")。 / p>

请记住:我添加的代码应该可行,但设计可能会使您的开发更具挑战性......