2012-06-14 19 views
0

我在backbone.js中的集合有問題,我做錯了什麼。 這是我的模型console.log上的集合模型爲空

var Point = Backbone.Model.extend({ 
    defaults: { 
     x: 0.0, 
     y: 0.0, 
     z: 0.0, 
    }, 

    validate: function(attrs) { 
     if(!isNumber(attrs.x) || !isNumber(attrs.y) || !isNumber(attrs.z)) 
      return "Discovered NaN point"; 
     else return null; 
    }, 
}); 

我的收藏:

var TrackCollection = Backbone.Collection.extend({ 
    model: Point, 
}); 

和視圖:

var TrackView = Backbone.View.extend({ 
    initialize: function() { 
     _bind('all', this.render, this); 
    }, 

    render: function() { 
     console.log(this.collection.models); 
     return this 
    },   
}); 

在我家的觀點我做的:

var c = new TrackCollection(); 
c.add({ x: 1, y: 1, z: 1}); 
c.add({ x: 1, y: 1, z: 1}); 
c.add({ x: 1, y: 1, z: 1}); 
var v = new TrackView({ 
    collection: c, 
}); 
v.render(); 

爲什麼控制檯.LOG(this.collection.mod ELS);在render方法中返回一個空數組? 相反,如果我將它改爲console.log(this.collection);它返回我的收藏對象..

編輯 這裏主頁視圖

window.HomeView = Backbone.View.extend({ 

    initialize: function() { 
    }, 

    events: { 
     "click #makeIT": "makeIT", 
    }, 

    render: function() { 
     $(this.el).html(this.template()); 
     return this; 
    }, 

    makeIT: function(e) { 

     var c = new TrackCollection(); 
     c.add({ x: 1, y: 1, z: 1}); 
     c.add({ x: 1, y: 1, z: 1}); 
     c.add({ x: 1, y: 1, z: 1}); 

     var v = new TrackView({ 
      collection: c 
     }); 

     v.render(); 
    } 

}); 

如果我複製makeIT內容並把它放在哪裏都是模型,並收集它的作品沒有別的

回答

0
相同的文件

你的代碼似乎有一些語法錯誤,對於你錯過的錯誤。對於下劃線綁定方法(_.bind),並且在模型視圖和集合中有額外的逗號。

這就是說,它似乎爲我工作,這裏是您的代碼的快速jsfiddle(我將日誌切換到警報)。

+0

主視圖和模型,集合和視圖在2個不同的文件中,所以我試圖移動'var c = new TrackCollection(); c.add({x:1,y:1,z:1}); c.add({x:1,y:1,z:1}); c.add({x:1,y:1,z:1}); var v =新的TrackView({collection:c, }); v.render();'在同一個文件中,它的工作原理。但是,如果我把它放入主視圖文件,它會停下來工作,並提醒我關於零對象而不是三個。 – originof

+0

我不明白爲什麼它應該有差異,如果它在第二個文件或沒有,但只是爲了檢查我在我的本地機器上測試它,它仍然正常工作。你確定他們按正確的順序加載嗎?在創建阻止加載正確的新視圖之前,可能在第二個文件中存在其他一些錯誤。 – Jack