2011-12-01 55 views
2

我有一個名爲Foo的Backbone視圖,它有一個滾動條。當滾動條在某個方向上移動時,我希望以各種方式更改應用程序中的其他視圖。這些視圖不嵌套在Foo內部 - 它們是完全獨立的,並且是獨立管理的。我應該如何讓Backbone應用程序中的視圖相互更改?

我應該將所有其他視圖的引用傳遞給Foo的構造函數,以便它可以手動更新它們嗎?還是應該使用事件來通知滾動條移動的其他視圖?如果是這樣的話,Foo應該觸發什麼對象,並由其他觀點來聆聽?

這些純粹是視覺上的變化,沒有支持它們的模型。

回答

3

我會用事件在這種情況下

拿這個例子:

NavigationView = Backbone.View.extend({ 
    initialize: function(options){ 
    options.events.bind("navigation:change", this.changeNavigation); 
    this.render(); 
    }, 

    changeNavigation: function(key){ 
    $('.menuItem', $(this.el)).removeClass("active"); 
    $('.menuItem', $(this.el)).filter("." + key).addClass("active"); 
    }, 

    render: function(){ 
    // rendering goes on here.... 

    } 
}); 

UserListView = Backbone.View.extend({ 

    initialize: function(options){ 
    options.events.trigger("navigation:change", "users"); 
    this.render(); 
    }, 

    render: function() { 
    // rendering goes on here.... 

    } 
}); 

// kickstart the application 

var myEvents = _.extend({}, Backbone.Events); 

var myNavigation = new NavigationView({events: myEvents}); 

// this is just a collection of users... i left it out as it is not really the point here... 
var users = new UserList(); 

var myUserList = new UserListView({collection: users, events: myEvents}); 

你應該需要更多的信息,對任何引用1個視圖到另一個,或事件,你也可以好好看看在Derick Bailey撰寫的這篇文章中,他將上述方法解釋爲一個eventAggregator,並列出了關於如何使用它(和替代方法)的文檔示例。 http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

相關問題