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
View Backbone.js-从一个视图绑定到另一个视图?_View_Backbone.js_Javascript Framework_Javascriptmvc - Fatal编程技术网

View Backbone.js-从一个视图绑定到另一个视图?

View Backbone.js-从一个视图绑定到另一个视图?,view,backbone.js,javascript-framework,javascriptmvc,View,Backbone.js,Javascript Framework,Javascriptmvc,我有一个主应用程序视图,标题中有一个过滤器菜单。当它被点击时,我想在一个单独的新闻提要视图中过滤内容。但我不知道如何将事件(以及传递类数据)从一个视图中的单击绑定到另一个视图中的函数 如何实现这一点?实现这一点的方法有很多,但您可能希望创建一个模型对象,该对象在两个视图之间共享。然后在视图1中单击,更新模型对象,并将视图2中的“更改时”绑定到模型对象 基本上,您可以将两个视图设置为与模型对象保持同步,对对象的任何更改都会导致视图的更改。主干中的所有内容都继承自主干。事件,因此您可以从任何位置触发

我有一个主应用程序视图,标题中有一个过滤器菜单。当它被点击时,我想在一个单独的新闻提要视图中过滤内容。但我不知道如何将事件(以及传递类数据)从一个视图中的单击绑定到另一个视图中的函数


如何实现这一点?

实现这一点的方法有很多,但您可能希望创建一个模型对象,该对象在两个视图之间共享。然后在视图1中单击,更新模型对象,并将视图2中的“更改时”绑定到模型对象


基本上,您可以将两个视图设置为与模型对象保持同步,对对象的任何更改都会导致视图的更改。

主干中的所有内容都继承自主干。事件,因此您可以从任何位置触发和绑定事件():


请注意,在本例中,当调用v2.eventHandler时,“this”将引用v1。有关更多信息,请参见主干。

如果在同一个.js文件中没有视图的两个实例变量,该怎么办?好的,关于应用程序结构,正如Ibdentley所指出的,您有很多选择。例如,您可以有一个类似于“控制器”的应用程序视图,它实例化一些子视图,侦听事件,并根据示例不遵循问题进行调度。您正在同一视图上触发事件,这是“捕捉”事件。+1这绝对符合主干的理念。+1似乎是一个方向,但如果我已经在视图中使用了一个模型,该怎么办?另外,如果我想要交互的视图是父视图和子视图(子视图嵌套在父视图中),该怎么办?我还发现这里提到的事件聚合器也很好用-Derick Bailey再次访问了事件聚合器-我不喜欢这个解决方案。它在组件之间创建紧密耦合。这被认为是反模式。
var View1 = Backbone.View.extend();

var View2 = Backbone.View.extend({
    eventHandler: function(data) {alert(data)}
});

var v1 = new View1;
var v2 = new View2;

v1.bind('hello-world-event', v2.eventHandler)
v1.trigger('hello-world-event', 'Hello World!')