2013-04-07 50 views
0

我需要Backbone.js的工作,我不能去「呈現」在這裏我的觀點裏部分是我的代碼:Backbone.js的視圖不會重置

var Vigne = { 
Models:{}, 
Collections: {}, 
Views:{}, 
Templates:{} 
} 

Vigne.Models.Raisin = Backbone.Model.extend({}) 

Vigne.Collections.Grape = Backbone.Collection.extend({ 
model: Vigne.Models.Raisin, 
url: "./scripts/data/vin.json", 
initialize: function(){ 
    console.log("grape initialised"); 
} 
}); 

Vigne.Views.Grape= Backbone.View.extend({ 
initialize: function(){ 
    _.bindAll(this,"render"); 
    this.collection.bind("reset",this.render); 
}, 
render: function(){ 
    console.log("render"); 
    console.log(this.collection.length); 
} 
}) 

Vigne.Router = Backbone.Router.extend({ 
routes:{ 
    "": "defaultRoute" 
}, 

defaultRoute: function(){ 
    console.log("defaultRoute"); 
    Vigne.grape = new Vigne.Collections.Grape() 
    new Vigne.Views.Grape ({ collection : Vigne.grape }); 
    Vigne.grape.fetch(); 
    console.log(Vigne.grape.length); 
} 
} 
); 

var appRouter= new Vigne.Router(); 
Backbone.history.start(); 

我也期待在調試器的控制檯中顯示我的集合的長度,似乎它不會重置。有任何想法嗎?

編輯:

我加入這個取功能中:

success: function(){ 
console.log(arguments); 
}, 
error: function() { 
    console.log(arguments); 
    } 
}); 

和獲取JSON文件的獲取函數成功,但它不觸發復位功能。

回答

2

骨幹在獲取成功時調用reset(),輪流觸發重置事件。但是,如果您的抓取由於某種原因而失敗,您將無法獲得任何活動。所以你必須在fetch方法中傳遞一個錯誤處理程序,並用它來識別錯誤並處理它。

Vigne.grape.fetch({ 
    error: function() { 
     console.log(arguments); 
    } 
}); 

您還可以將成功回調傳遞回來,並且您將能夠在您的提取中瞭解問題。 您也可以使用Charles代理/ Chrome Debuuger工具來確定您是否從後端獲得正確響應。

你能否粘貼你的迴應,你從服務器獲得什麼。您可能會改變數據,但保持格式正確。

編輯: 還有一個問題,我可以看到的是,你有沒有在你的模型中定義的屬性,以便以後骨幹取,它刷新您的收藏從服務器獲取的新車型。 Fetch方法需要來自服務器的json對象數組,並且響應數組中的每個json對象都應該與您在模型中默認設置的屬性匹配,否則它將無法創建新模型,因此將無法刷新你的收藏。你能否糾正這一點,讓我知道。

Vigne.grape.fetch({ 

    reset:true, 

    error: function() { 
    console.log(arguments); 
    } 
    } 

); 

這本書幫助我:

+0

實際上是取上得到JSON文件 – Hosni 2013-04-07 14:51:32

+0

能否請你定義默認值成功在你的模型中,屬性應該與來自服務器的響應數組中的json對象匹配。請閱讀更新的答案。 – sachinjain024 2013-04-07 17:08:19

+0

精度:實際上我得到的文件不存儲在服務器中,它是本地文件可以是問題嗎? – Hosni 2013-04-07 18:34:12