在Backbone.js中调用不同视图的方法

我在ASP.NET MVC 4中使用backbone.js。

我想从一个视图中调用不同视图的方法。 为了使这更容易理解,我在下面创建了一个小例子。

这里在MyView2一侧的OperationCompleted方法我要调用以下内容…

  • 调用MyView 2的myMethodB
  • 调用MyView 1的myMethodA
  • 调用AppView的myMethodC

我该怎么做呢 ? 我暂时使用了诸如创建视图对象和调用它们之类的东西。

像这样的东西var view1 = new MyView1(); 然后是view1.myMethodA(); ,有一个更好的方法,请帮我找到它。 谢谢

 var MyModel = Backbone.Model.extends({ }); // View for a Main Grid var MyView1 = Backbone.View.extend({ ... myMethodA: function(){ // do something with View 1 } ... }); // View for subgrid in Main Grid var MyView2 = Backbone.View.extend({ ... myMethodB: function(){ // do something with View 2 }, OperationCompleted: function(){ // call myMethodB of MyView 2 // call myMethodA of MyView 1 // call myMethodC of AppView } ... }); var AppView = Backbone.View.extend({ ... myMethodC: function(){ // do something with App View } ... }); 

有这个工作! 必须使用聚合器模式,粘贴在我如何使用它的示例示例下面…

 Backbone.View.prototype.eventAggregator = _.extend({}, Backbone.Events); var model = Backbone.Model.extend({ }); var view1 = Backbone.View.extend({ initialize: function () { this.eventAggregator.bind("doSomething_event", this.doSomething); }, doSomething: function(name){ alert("Hey " + name + " !"); } }); var view2 = Backbone.View.extend({ callToDoSomething: function(){ self.eventAggregator.trigger("doSomething_event", "Yasser"); } }); 

参考

https://stackoverflow.com/a/11926812/1182982

这里的另一个模式是通过触发视图附加到的DOM元素上的事件来调用视图的函数。

例如:

 var AppView = Backbone.View.extend({ el: 'body', events: { 'alertMe': 'alertMe' }, alertMe: function(ev, arg){ console.log(args) alert("You've been alerted!") } }); 

然后在代码的某个时间点(甚至在另一个视图中):

 // Shows an alert and prints object. $('body').trigger('alertMe', { foo: 'bar' });