2012-12-11 28 views
0

我已經做了一個簡單的實驗來理解在模型上獲取並獲取集合。然而,這個代碼給出了「未定義」兩種:爲什麼通過Backbone獲取'undefined'後?

// Model and Collection 
    var SingleItem = Backbone.Model.extend({ 
     urlRoot : '/data/item.json', 
     parse: function(response) { 
      console.log(response); 
      return response; 
     } 
    }); 

    var ManyCollection = Backbone.Collection.extend({ 
     model: SingleItem, 
     url: '/data/items.json', 
    }); 

    var many = new ManyCollection(); 
    many.fetch(); 
    console.log(many); 

    var single = new SingleItem(); 
    single.fetch({ 
     success: function(data) { 
     console.log("OK"); 
     console.log(data.toJSON()); 
     }, 
     error: function(data){ 
     console.log("NOK"); 
     } 
    }); 


    console.log(single.get('name')); 

演示也在這裏:https://github.com/mulderp/backbone-model-fetch

爲什麼我得到「未定義」?我錯過了什麼?

(從開發者控制檯輸出:

dev output

+0

當然,你需要把'get'記錄放在'success'回調中嗎?'fetch'是異步記住的。 – stusmith

+0

是的,有我的盲點...謝謝!這是這個問題的答案。也許你想放? – poseid

回答

3

fetch是異步的:它會立即返回時,數據已被提取之前

移動調試邏輯裏面的success處理程序應該修復。問題

+0

謝謝它解決了我的問題。但是,你能告訴我你是如何知道'fetch'帶一個配置對象嗎?因爲在Backbone的[documentation](http://documentcloud.github.io/backbone/#Model-fetch) – lbrahim

+1

中找不到任何關於它的參考資料在你鏈接到的文檔中,它被定義爲'fetch([options]) ',表明它需要一個選項選項參數。然後它繼續說「在選項散列中接受成功和錯誤回調」。這是一個常見的骨幹成語 - 很多方法都帶有一個選項對象。如果有疑問,可以隨時閱讀註釋的源代碼:http://documentcloud.github.io/backbone/docs/backbone.html#section-55 – stusmith

相關問題