var myView = Backbone.View.extend( {
events: {
'click #selector' : 'onClick'
},
onClick: function( event ) {
}
})
onClick
事件对于所有视图都是全局的,还是仅包含将拦截它的视图?
假设我有另一个想要在调用onClick时做出反应的View,这样做的最佳方式是什么?
我应该为MyView:onClick
等事件指定名称,还是这不是必需的?
答案 0 :(得分:0)
我知道如何调用事件的三种方式:
第一:通常,它知道每个人。方式是在其视图中的呼叫事件(我认为,你不需要任何例子)
第二:调用事件parent
(并不意味着扩展)视图。例如:
<body>
<div id="content">
<div id="view1" >
<input type="checkbox" id="first_view_element">
</div>
<div id="view2" >
<input type="checkbox" id="second_view_element">
</div>
</div>
</body>
如果是这样的话:父视图的el
是&#39; #content&#39;和子视图的el
是&#39;#view1&#39;,您可以在父视图中写入
events: {
'click #first_view_element' : 'onClick'
}
第三:在完全不同的视图中调用事件。在这种情况下,我尝试使用上面的html代码来解释。如果一个视图的el
是&#39;#view1&#39;而另一个el
是&#39;#view2&#39;
App.hendChangesObj = 0 // it was simple name, i couldn't find variable name and param
App.View1 = Backbone.View.extend({
events: {
'click #first_view_element' : 'onClick'
},
onClick: function( event ) {
App.hendChangesObj++;
}
});
App.View2 = Backbone.View.extend({
initialize: function() {
this.listenTo(App.hendChangesObj, "change", this.onClick);
},
onClick: function() {
// do something
}
});
答案 1 :(得分:0)
对于所有视图,onClick事件是全局的,还是仅包含将拦截它的View?
Backbone使用委托事件,这意味着所有事件侦听器都绑定到视图的根元素(this.el
)。因此,事件仅对一个特定视图实例可见。
假设我有另一个想要在调用onClick时做出反应的View,这样做的最佳方式是什么?
最纯粹的主干方法是使两个视图共享一个模型实例,并让被点击的视图更改模型,可能像this.selectionModel.set('selected', true);
。此模型将表示跨视图共享的状态。它不一定必须是服务器端数据库的状态,以适应MVC范例。
另一个可行的选择是让视图本身发出事件:
onClick: function (event) {
this.trigger('click', event); //or 'selected' might be better
}
然后,您可以在路由器的源视图和目标视图之间绑定事件处理程序。
我是否应该命名我的事件,例如MyView:onClick或者这不是必需的吗?
当你有一个小代码库和少量事件时。但是,我会使骨干层域中的事件名称具体,而不是复制浏览器的通用UI输入事件名称。因此,考虑到“选择”或“激活”,或者根据您的应用程序逻辑,任何有意义的内容都不是“点击”。