2011-12-20 49 views
3

我一直在尋找backbone.js教程幾個小時了,如果它適合我​​想要實現的內容,而不需要花費一些認真的時間來找出答案,那麼我就不會讓自己頭腦發熱。Backbone.js是這個任務的正確框架嗎?

我的應用程序主要基於一個頁面,相當AJAX沉重。該頁面上有幾個UI元素,用於輪詢服務器並獨立更新。此外,還有一箇中央輪詢機制,用於查找可能觸發任何其他UI組件的更新的事件。

我正在考慮的是將所有這些獨立的URL合併爲一個,並讓我的前端僅在該URL上偵聽,然後將每個事件委託給相應的UI元素。實際上,它有點像我的前端的消息總線。

聽起來像骨幹的合理使用?還是我錯過了它的重點?

回答

0

骨幹會工作,但我也會檢查ember.js,也被稱爲sproutcore 2.0,骨幹對我來說過於冗長,ember.js有點照顧,檢查http://www.emberjs.com/

3

骨幹應該適用於這種情況。

創建一箇中心事件輪詢器。這從服務器上獲取所有類型的事件,並將它們發佈到應用程序(未測試)的其餘部分:

var EventPoller = Backbone.model.extend({ 
    url: "events/", 

    poll: function(){ 
     this.fetch({ 
      success: function(self, response){ 
       self.handleEvents(response); 
       self.poll(); 
      }, error: function(self){ 
       self.poll(); 
      } 
     }) 
    }, 

    handleEvents: function(events){ 
     var self = this; 
     $(events).each(function(index, event){ 
      self.trigger(event.name, event.data); 
     }); 
    } 
}); 

然後讓幾個模型偵聽這些事件:

var StockModel = Backbone.Model.extend({ 

    initialize : function() { 
     this.poller.bind('stockChange', this.changeStock, this); 
    }, 

    changeStock: function(stock){ 
     this.set({name: event.name}); 
    } 
}); 

終於讓視圖監聽模型的變化:

var StockView = Backbone.View.extend({ 

    initialize : function() { 
     this.model.bind('change:name', this.updateStock, this); 
     //this.poller.bind('stockChange', this.updateStock, this); //you could also listen for poll events directly in view with out having a model for each view. 
    }, 

    updateStock: function(){ 
     $(this.el).html(model.get("name")); 
    } 
}); 

要設置輪詢和觀點:

var eventPoller = new EventPoller(); 
var stockModel = new StockModel({poller: eventPoller}) 
var stockView = new StockView({model:stockModel}); 
eventPoller.poll(); 

一般性建議是骨幹需要花費一些時間來學習,但如果您閱讀文檔並遵循一些基本示例,則您將加快步伐。

也許最主要的困惑是this。我會建議使用螢火蟲和調試通過應用程序,看看如何this更改。

相關問題