Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干视图之间的通信_Backbone.js - Fatal编程技术网

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
}