2012-01-05 103 views
4

在Knockout.js我創建一個observableArray推車型爲:Knockout.js observableArray vs Backbone.js Collection - 有什麼區別?

function Room(data) { 
     this.name = ko.observable(data.name); 

    } 


    function RoomViewModel() {  
     var self = this; 
     self.rooms = ko.observableArray([]); 
     self.newRoomText = ko.observable();   

     self.addRoom = function() { 
      self.rooms.push(new Room({ name: this.newRoomText() })); 
      self.newRoomText("");  
      $("#modal").dialog("close");   
     }.bind(self);   
    } 

在Backbone.js的我想創建一個集合來存儲我的模型:

var Book = Backbone.Model.extend(); 

var Books = new Backbone.Collection([ 
    {name: "Abe Lincoln - Vampire Hunter"} 
    {name: "Pride and Prejudice and Zombies"} 
]); 

剛剛是多麼的不同,這些2層結構從彼此?

爲了使這些數據結構與標準的JavaScript數組不同,到底什麼是幕後?

回答

9

這是一個難以完全回答的問題,但這裏是我的看法:)。

Backbone.js Collection

  • 從服務器
  • 取模型觸發修改/添加/刪除事件
  • 聽模型事件,並引發他們對藏品
  • 模型的自動驗證
  • 很多跨瀏覽器的易用性方法用於處理集合(每個,最大,排序,縮小等)

Knockout.js observableArray

  • 曲目添加和刪除的元素 - 更新UI自動
  • 的陣列的方法跨瀏覽器實現(例如IE8有問題瓦特/本地.indexOf()
  • 便於學習destroy & destroyAll方法Rails開發者將在對象上_destroy屬性設置爲true - 這將告知鐵路的ActiveRecord的哪些對象應該被刪除。

Backbone.Collection只與Knockout.js一起使用Backbone.js框架和observableArray。因爲它們是框架的一部分,所以將它們彼此進行隔離並不是真實的,如果您的應用程序構建在Backbone上,則不能使用observableArray,反之亦然。

如果你想知道什麼究竟是怎麼回事幕後那麼這裏的背後,是源代碼:

+0

謝謝 - 兩者是概述很有幫助。 – PhillipKregg 2012-01-06 02:20:08