所以,我有一个视图(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”完全相同?
答案 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回调可能会派上用场的原因。
对于平移地图,您可以在视图上定义另一个方法,在地址更改时处理此问题。