2013-02-12 14 views
1

我正在困難時間「綁定」我的主要視圖實例中的路由器事件。我的第一個想法是因爲路由器只觸發我的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() { 

     }, 

    }); 

}); 

回答

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); 
    } 

每當收集被取出(復位)一個項目被添加(添加)或刪除(刪除)渲染方法將被調用你的觀點

+0

如果我的集合沒有改變呢?我想讓我的視圖在我的路由器改變時改變?這不可能嗎? – Penner 2013-02-15 21:07:47

+0

當然,您可以手動觸發視圖的渲染事件。這可以通過例如您將視圖綁定到的全局事件來完成。 – Drejc 2013-02-18 15:27:30