如何在Backbone.js视图之间传递事件?

时间:2014-01-13 16:06:43

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

我正在使用我的第一款Backbone应用程序CRUD风格。 我有modelListView,其中一个编辑按钮链接到modelView。 modelView有一个删除按钮来销毁模型。

现在我想要实现的是在用户返回modelListView时以及成功删除模型时向用户显示成功消息。

我在model:deleted内触发了success个事件,但是modelListView的听众:

        initialize: function(){
            this.on('wine:deleted', function(){
                alert('wine:deleted')
            })
        },

不能“听到”那个。这种视角间沟通的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

我使用过几种方法。一种方法是让两个视图都包含对同一模型的引用 - 然后您可以根据需要了解的模型从所讨论的模型中监听事件。第二种是使用event aggregator,本质上是一个事件对象,它提供了一个路由事件的位置,因此您可以减少视图监听事件所需的对象数量。我使用的通常是应用程序的复杂性以及我需要路由事件的模型/集合对象的数量。

答案 1 :(得分:0)

我认为你的基本问题是这一行:

this.on('wine:deleted', function(){

你说这行代码来自modelListView,但事实是,Views没有on方法(只有Model s和{{1 s)。我想你要找的是:

Collection

但即使这样也不太正确,因为命名空间似乎很有趣。如果我认为你在做:

this.model.on('wine:deleted', function(){

在您的Wine模型中,然后捕捉您刚才需要的事件:

this.trigger('deleted');

然而,即使这看起来有点过分,因为Backbone已经有一个事件可以在this.model.on('deleted', function(){ 被破坏时使用,不需要任何额外的Model语句:

trigger

希望有所帮助。