我在ASP.NET MVC 4中使用backbone.js。
我想从其中一个视图调用不同视图的方法。为了使这更容易理解,我在下面创建了一个小例子。
这里在MyView2一侧的OperationCompleted方法我想调用以下内容......
我该怎么做?我暂时使用了诸如创建视图对象和调用它们之类的东西。
像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
}
...
});
答案 0 :(得分:3)
有这个工作!必须使用聚合器模式,粘贴在我如何使用它的示例示例下面...
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");
}
});
<强>参考强>
答案 1 :(得分:0)
这里的另一个模式是通过触发视图附加到的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' });