3

如何从主干中的 view#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

4 回答 4

1

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

于 2012-09-06T20:48:59.230 回答
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 回答
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 回答