2012-09-05 165 views
1

最近有很多问题,尽管我不能说他们正在加快我的发展速度。只是让我感到不舒服。需要围绕我的头。骨干视图触发全球事件

在一个很好的世界骨干视图通知基础模型,模型触发事件。查看更新本身作为对事件的回应。

如果视图触发事件而另一视图响应此事件,这是合法的。基础模型甚至可能对此没有线索?

假设我有一个购物车是一个集合,现在我有一个视图叫它一瞥视图的项目数和总成本,它有一个链接来查看购物车的详细内容。

因此,用户单击链接视图触发事件,但这会被控制器或任何其他方,但模型捕获。

让底层模型脱离游戏,是吗?合法的?

+1

模型一般应该代表你的数据,如果数据并不需要改变或响应事件做任何事情,那么我不明白为什么它应该是一个问题绕过它。请记住,您实际上并不总是**需要**模型,具有没有模型的视图是完全可以接受的。 – Jack

+0

授予杰克。就像我在下面提到的那样,这两个视图共享相同的集合。所以这里是两个观点直接沟通的关注。无论如何你的观点是有道理的。 – mobygeek

回答

4

Backbone的好处是它的灵活性,它并不要求你严格遵守特定的架构。

因此,一个视图触发一个事件并没有问题,另一个视图直接响应此事件而不更改模型上的任何内容。

然而,需要问的问题是实现架构的最简洁的方式。

在我看来,你描述的情况,我会使用全局事件对象的2个意见相互沟通。

下面是一些示例代码

var globalEvents = {}; 
_.extend(globalEvents, Backbone.Events); 

var GlimpseView = Backbone.View.extend({ 
    events: { 
    'click a.see-verbose': 'onSeeVerboseClick' 
    }, 

    onSeeMoreClick: function() { 
    globalEvents.trigger('seeVerbose', this.model); 
    } 
}); 

var VerboseView = Backbone.View.extend({ 
    initiliaze: function() { 
    globalEvents.on('seeVerbose', onSeeVerbose, this); 
    }, 

    onSeeVerbose: function(model) { 
    // code to render the verbose view 
    } 
}); 
+0

谢谢保罗。我的实现与您的示例非常相似。我主要关注的是这两个观点分享作为购物车的共同收藏。 – mobygeek