Backbone.js 主干视图之间的通信
上面的Backbone.js 主干视图之间的通信,backbone.js,Backbone.js,上面的onClick事件对所有视图都是全局的,还是只有包含它的视图才会截获它 假设我有另一个视图,希望在调用onClick时做出反应,那么最好的方法是什么 我应该为我的事件命名,例如MyView:onClick,还是不需要这样做?我知道三种调用事件的方法: 首先:一般来说,它认识每个人。方法是在视图中调用事件(我认为,您不需要任何示例) Second:调用事件父视图(并不表示扩展)视图。例如: var myView = Backbone.View.extend( { events: {
onClick
事件对所有视图都是全局的,还是只有包含它的视图才会截获它
假设我有另一个视图,希望在调用onClick时做出反应,那么最好的方法是什么
我应该为我的事件命名,例如
MyView:onClick
,还是不需要这样做?我知道三种调用事件的方法:
首先:一般来说,它认识每个人。方法是在视图中调用事件(我认为,您不需要任何示例)
Second:调用事件父视图(并不表示扩展)视图。例如:
var myView = Backbone.View.extend( {
events: {
'click #selector' : 'onClick'
},
onClick: function( event ) {
}
})
Third:在完全不同的视图中调用事件。在本例中,我尝试使用上面的html代码来解释。如果一个视图的el
为“#视图1”,另一个视图的el
为“#视图2”
上面的onClick事件对所有视图都是全局的,还是只有包含它的视图才会拦截它
主干使用委派事件,这意味着所有事件侦听器都绑定到视图的根元素(this.el
)。因此,事件仅对一个特定视图实例可见
假设我有另一个视图,希望在调用onClick时做出反应,那么最好的方法是什么
最纯粹的主干方法是使模型实例由两个视图共享,并让单击的视图更改模型,可能类似于this.selectionModel.set('selected',true)代码>。此模型将表示视图之间共享的状态。它不一定必须是服务器端数据库的状态,以适应MVC范式
另一个可行的选择是让视图本身发出事件:
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
}
});
然后可以在路由器的源视图和目标视图之间绑定事件处理程序
我应该为我的事件命名,比如MyView:onClick,还是不需要
当你有一个小的代码库和一小部分的事件时就不是了。但是,我将使主干层的事件名称特定于域,而不是重复浏览器的通用UI输入事件名称。因此,不要“点击”考虑“选择”或“激活”,或者考虑应用逻辑的任何意义。
events: {
'click #first_view_element' : 'onClick'
}
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
}
});
onClick: function (event) {
this.trigger('click', event); //or 'selected' might be better
}