2

我正在使用带有 ASP.NET MVC 4 的主干.js。

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

在我想调用以下操作的 OperationCompleted 方法中的 MyView2 中...

  • 调用 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 
}
...
});
4

2 回答 2

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

于 2012-10-04T10:17:04.727 回答
1

这里的另一种模式是通过触发视图附加到的 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' });
于 2013-09-09T16:58:40.533 回答