使用Backbone Marionette从弹出模式添加到集合

时间:2012-06-28 18:32:35

标签: backbone.js marionette

我对Backbone和Marionette很陌生,并且很难让我的观点得到沟通。

我有一个显示项目列表的复合视图。要在列表中添加一个新项目,我有一个弹出模式,它在一个与复合视图分开的新项目视图中打开。

我不确定这是执行此操作的最佳方式,但在模式中,我使用所有项目创建了集合的新实例,并将新项目添加到该集合中。此新项目显示在原始复合视图中,但仅在刷新页面后显示。

我似乎无法弄清楚如何让复合视图侦听add事件并在添加新模型后渲染它。

我在这里走在正确的轨道上吗?如果没有,我应该怎么做才能从模态中添加到集合中?

2 个答案:

答案 0 :(得分:1)

我想我弄明白了。我没有在模态视图中创建新集合,而是在创建模态视图时将复合视图中的集合作为参数传递。现在,当我在模态中添加新模型时,会在两个版本的集合上自动触发“add”事件,并且视图会自动呈现新模型。不需要像我想的那样绑定任何额外的事件。

答案 1 :(得分:0)

您的解决方案可行,但意味着您的观点非常紧密。您可能希望改为使用事件(请参阅How do I send a model that was clicked on within a ItemView to another ItemView that is on the same page?

您的功能如何与事件一起使用:

  1. 在模式中,输入要创建的模型的数据
  2. 按“保存”按钮时,
    1. 您验证并保存模型var myNewModel = ...
    2. 触发事件:MyApp.MySubApp.trigger("item:add", myNewModel)
  3. 在列表视图的控制器中,您可以收听该事件,并将新模型添加到集合中。
  4. 控制器中的处理程序代码如下所示:

    MyApp.MySubApp.on("item:add", function(model){
      this.myCollection.add(model);
    });
    

    如果您想了解有关使用活动的更多信息,请查看我写的2个Marionette教程:

    两者都使用事件来传达应用程序内的信息。

    此外,此处还解释了基本事件:http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf