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

时间:2012-10-04 05:06:00

标签: javascript jquery 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 
}
...
});

2 个答案:

答案 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");
    }   
});

<强>参考

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

答案 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' });