从主视图实例绑定路由器事件

时间:2013-02-12 17:28:56

标签: javascript backbone.js

我很困难从我的主视图实例“绑定”我的路由器事件。我的第一个想法是因为路由器只触发我的Depths集合。如何正确通知我的viewpoint.js页面更改?

router.js

var depth = depth || {};

(function() {
    'use strict';

    var DepthRouter = Backbone.Router.extend({

    routes: {
        '*page' : 'setPage'
    },

    setPage: function( page ) {
        // Set the current page
        page = page.trim() || 'home';

        // Trigger a collection {page} event
        depth.Depths.trigger(page);

    }

});

... // instance creation and Backbone.history.start() stuff

}());

viewpoint.js

var depth = depth || {};

$(function($) {
    'use strict';

    depth.Viewpoint = Backbone.View.extend({ 

        el: 'section#right > div.content',

        // Bind relevant triggers
        initialize: function() {

        },

    });

});

1 个答案:

答案 0 :(得分:0)

您需要将集合中的更改绑定到视图中。 这意味着无论何时您想要更新集合的视图,都会发生这种情况。

例如:

var list = new ModelList();

var listView = new ModelView1({model: list});    
var counterView = new ModelView2({model: list});

我们有两个视图链接到相同的colleciton模型: 现在我们绑定到集合事件:

ModelView1 = Backbone.View.extend({

    initialize : function() {

        this.model.bind('add', this.render);
        this.model.bind('remove', this.render);
        this.model.bind('reset', this.render);
    }

ModelView2 = Backbone.View.extend({

    initialize : function() {

        this.model.bind('add', this.render);
        this.model.bind('remove', this.render);
        this.model.bind('reset', this.render);
    }

每当提取集合(重置)时,系统会添加(添加)或删除(删除),系统会调用渲染方法在你的观点