3

バックボーンのビュー#2 からビュー#1 のメソッドを呼び出すにはどうすればよいですか?

view#1 = Backbone.View.extend({
    plot_markers:function(){
        /*some code */
    } 
});

view#1 = Backbone.View.extend({
    initialize:function(){
        view#1.plot_markers();
    }
});

バックボーンでグローバル メソッドを設定するにはどうすればよいですか。多くのビューが同じメソッドを使用できる場所

ありがとうございます

4

4 に答える 4

1

View#2 は View#1 への参照を持つ必要がありますが、循環参照を簡単に作成できるため危険です。これにアプローチするより良い方法は、コントローラーなどの仲介者がメソッド呼び出しを行うことです。View#1 は、コントローラーがリッスンするイベントをトリガーし、次に View#2 で適切なメソッドを呼び出すか、またはその逆です。これは、「関心の分離」の全体的な考え方に従っているため、お互いの見解を無視することを目的としています。

于 2012-09-06T20:48:59.230 に答える
0

これを試して、

view1 = Backbone.View.extend({

    plot_markers:function(){
        //add your code here,..
        alert('called....'); 
    } 
});

view2 = Backbone.View.extend({
    initialize:function(){
        var v1 = new view1();
        v1.plot_markers();
    }
});
var v2 = new view2();
于 2012-09-07T12:26:41.290 に答える
0

View2 を View1 に拡張させることができます

class View1 extends Backbone.View
  plot_markers: -> # dot stuff 

class View2 extends View1
  initialize: ->
     @plot_markers()
于 2012-09-06T21:53:10.433 に答える
0

アプリケーションの構造とビューの相互関係に応じて、1) ルーターがリッスンするイベントを起動し、それに応じて別のアクションを実行する (Brendan Delumpa が提案したように)、または 2) グローバルなイベント アグリゲーターを作成することができます。どこでもリッスンし、どこでもイベントをトリガーします。

Derick Bailey は、Backbone でイベント アグリゲーターをいつ、どのように使用するかについて書いています。簡単な例を次に示します。

App = {};
App.events = _.extend({}, Backbone.Events);

// Subscribe to your:event
App.events.on("your:event", function(){
  // Carry out whatever's supposed to happen when the event
  // has been triggered here.
});

// Publish your:event
App.events.trigger("your:event");
于 2012-09-08T03:35:52.777 に答える