0

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

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

  1. 带有表单的 ItemView
  2. 包含每个 li 标签的 itemView 列表的复合视图。

最初在页面加载时,它使用 fetch() 调用从 db 呈现数据,并将所有葡萄酒名称附加到侧栏。然后,每次点击酒名,我都可以查看其对应的详细信息。我的疑问是,除了从表单 itemView 到 CompositeView 的侦听器之外,一切都有效。我将简要解释一下。

当我在 ItemView 表单中更新/删除时,CompositeView 中的特定 li 不会通过侦听事件绑定器来更新/删除。如果我使用本地存储但不作为基于服务器/数据库的应用程序,它可以工作。我应该怎么做才能让监听器监听来自表单 itemView 的更改并呈现它。任何建议都会帮助我继续前进。

4

1 回答 1

1

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

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

基于 jsFiddle 编辑:

我添加了应该使您的示例功能正常的代码(如果没有功能示例,很难确定):http: //jsfiddle.net/VvXDs/基本上,我添加了一条应用程序级消息,并在列表中监听它以触发render如有必要。虽然这是功能性的,但这种模式必然会导致问题。

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

发生的情况是,您有一个包含所有巧克力的集合,并且用户单击链接以显示其中一个。然后,尽管您已经拥有数据,但您从服务器获取要显示的模型的实例。很明显,监听器不起作用:它们是在同一模型(服务器端)的 2 个不同实例(客户端)上定义的。(如果您担心过时的数据,您应该将相同的模型实例传递给视图,并调用fetch该实例来更新数据。)

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

如果您有兴趣了解有关以有状态方式使用路由的更多信息,请查看我的书http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf的免费示例(“实现路由”一章”)。

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

于 2013-08-23T14:26:22.693 回答