还有另一种方法,它与“onShow”完全相同吗?

时间:2015-07-30 09:13:34

标签: backbone.js marionette

所以,我有一个视图(marionette itemview),它是根据输入的地址呈现谷歌地图。这个视图正在应用程序的三个地方使用。在两个地方,

案例1: 我正在使用区域来显示视图(例如:xyzregion.show(new mapView()。render());),

案例2: 我不是在使用region,而是我在做:this.el.innerHTML = new mapView()。render();。

尽管marionette文档提到ItemView,CompositeView,collectionView,LayoutView(Docs)确实支持onShowwhen的这个功能,如果我不使用该区域来显示地图视图,则不会触发onShow。经过一些研究后,我才知道“视图本身不会触发onShow,而是由区域触发。

有没有办法触发“onShow”,即使视图不是由地区显示的?或者是否有任何其他方法与“onShow”完全相同?

1 个答案:

答案 0 :(得分:1)

听起来你只想编写自己的pub-sub模式的自定义实现。

由于您使用的是木偶,您可以使用

vent = new Backbone.Marionette.EventAggregator();

这是一个可以广播/收听事件的对象。

或者,您可以定义模型实例并将其发送到视图:

var View = Backbone.View.extend({ 
    initialize: function(){
        this.model.on("change:address", this.render, this); 
    }, 
    render: function(){ //Render }
}); 

var someModel = new SomeBBModel(); 
var view = new View({ model: someModel }); 

代码中的其他地方:

//Set address and trigger change 
model.set("address", "bla"); 

要激活Google地图,div必须位于DOM中,这就是为什么onShow回调可能会派上用场的原因。 对于平移地图,您可以在视图上定义另一个方法,在地址更改时处理此问题。