2013-08-19 24 views
2

從API創建新模型時,API具有idAttribute ID。這是我的模型:主幹忽略idAttribute並設置自己的

class Video extends Backbone.Model 
    idAttribute: 'ID' 
    urlRoot: inbox.api.url + "/program" 

收藏:

class Videos extends Backbone.Collection 
    model = Video 
    localStorage: new Backbone.LocalStorage 'inbox.video' 
    url: inbox.api.url + "/program" 

這裏林將模型集合:

_.each data, (o) => 

     model = collection.get o.ID 
     if model != undefined 
      model.set o 
     else 
      collection.create o 

的問題是創建的模型的ID不是ID在返回的數據中,每次創建一個模型,因爲它在尋找o時找不到模型.ID

這是Ø在itterations之一:

ChannelID: "b5f52a36-b154-4232-ace0-4075c384bee1" 
ID: "10fa83a6-8508-40a3-a901-a40cad2041da" 
LastWriteUTC: "2013/08/19 02:51:14 PM" 
Name: "Moments_of_Everyday_Life.mp4" 
Publisher: "Marthin" 
Size: 1043200 

爲什麼模型的ID屬性沒有設置正確的ID?

謝謝

回答

3

你的問題可能是,在其中model = Video正在評估目前尚不能確定的點。嘗試在初始化方法分配模型

例如

var Videos = Backbone.Collections.extend({ 

    localStorage: new Backbone.LocalStorage('inbox.video'), 
    url: inbox.api.url + "/program", 

    initialize: function() { 
     this.model = Video; 
    } 
}) 
+0

哇,就是這樣。非常感謝 – Harry

+0

這將工作,但你錯過了根本上的CoffeeScript語法問題。 –

0

這不會做你認爲它的作用:

class Videos extends Backbone.Collection 
    model = Video 

model = Video集合的model屬性不設置爲Video ,它只是創建一個私人類變量。如果你看一下生成的JavaScript,你會看到這樣的內容:

var Videos = (function(_super) { 
    var model; 
    //... 
    model = Video; 

    return Videos; 

})(Backbone.Collection); 

如果你正在創建一個model屬性,你會看到:

Video.prototype.model = Video; 

代替。因此,在Videos的實例上不會有model屬性,Backbone將使用默認的Backbone.Model,並且具有idAttribute: 'id'

你可能想這樣說:

class Videos extends Backbone.Collection 
    model: Video 

冒號會得到你,你期待Videos::model

看一看一個simple demo

class M extends Backbone.Model 

class C1 extends Backbone.Collection 
    model = M 

class C2 extends Backbone.Collection 
    model: M 

console.log(C1::model) 
console.log(C2::model) 

,你會看到其中的差別,C1::modelBackbone.ModelC2::modelM