在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"); } });
参考
这里的另一个模式是通过触发视图附加到的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' });