Backbone.js从视图#2调用视图#1的方法

时间:2012-09-06 18:22:05

标签: backbone.js

如何从骨干网中的视图#2调用View#1的方法?

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

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

如何在骨干网中设置全局方法。其中许多视图可以使用相同的方法

感谢你

4 个答案:

答案 0 :(得分:1)

视图#2必须引用View#1,但这可能很危险,因为创建循环引用很容易。处理此问题的更好方法是让中间人(例如控制器)执行方法调用。视图#1将触发控制器侦听的事件,然后在View#2上调用正确的方法,反之亦然。我们的想法是让你的观点彼此无知,因为这遵循了“关注点分离”的整个想法。

答案 1 :(得分:0)

你可以让View2扩展View1

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

class View2 extends View1
  initialize: ->
     @plot_markers()

答案 2 :(得分: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();

答案 3 :(得分:0)

根据应用程序的结构以及视图如何相互关联,您可以1)触发路由器侦听的事件并执行响应中的其他操作(如Brendan Delumpa建议),或者2)创建全局事件聚合器您可以随时随地收听并在任何地方触发事件。

Derick Bailey写在how and when to use event aggregators in 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");