2

ASP.NETMVC4でbackbone.jsを使用しています。

ビューの1つから別のビューのメソッドを呼び出したい。これを理解しやすくするために、以下に小さな例を作成しました。

ここでは、OperationCompletedメソッドの横にあるMyView2で、次のように呼び出します...

  • MyView2のmyMethodBを呼び出す
  • MyView1の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

ここでのもう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 に答える