2013-10-02 63 views
0

下面是我用於從Web API獲取數據的代碼。但每次我嘗試檢索數據時,都會得到相同的錯誤:無法在ember.js中設置未定義或空引用的屬性'store'。TypeError:無法在ember.js中設置未定義或null引用的屬性'store'

/// <reference path="Lib/ember.js" /> 
/// <reference path="Lib/ember-data.js" /> 

var App = Ember.Application.create(); 

Ember.onerror = function(e) { 

    alert(e); 

}; 

App.ApplicationAdapter = DS.RESTAdapter.extend({ 
    namespace: 'api' 
}); 

App.store = DS.Store.create({ 
    adapter: App.ApplicationAdapter 
}); 

App.Product = DS.Model.extend({ 
    ID: DS.attr("int"), 
    Name: DS.attr('string'), 
    Category: DS.attr('string'), 
}); 



App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
     {{debugger}} 
     var store1 = this.get("store") 

     var k = store1.find('product', 1) 
     return k; 
    } 
}); 
+0

你使用哪種版本Ember.js的的jsfiddle? –

+0

Shimon,我正在使用最新版本的ember.js,ember-data.js –

回答

0
  1. 確保您使用Ember.js和灰燼,數據的最後一個版本。
  2. 這是你如何定義一個商店爲你的應用:在Store
App.Store = DS.Store.extend({ 
    adapter: App.ApplicationAdapter 
}); 

注資本Sextend代替create

Ember-Data Guide

+0

我已經試過這個,但得到同樣的錯誤 –

+0

Hi Shimon,想知道你能不能幫我一個例子 –

2

你的問題是與從服務器返回的JSON。您需要返回以下對象:

{ 
    product: { 
    // key value 
    } 
} 

如果你想使用DS.RESTAdapter默認值,你可以返回該格式的數據:

{ 
    product: { 
    id: 1, 
    name: 'some name', 
    category: 'some category' 
    } 
} 

,改變你的模型映射到:

App.Product = DS.Model.extend({ 
    name: DS.attr('string'), 
    category: DS.attr('string'), 
}); 

如果你想使用的資本屬性,如NameCategory。您將需要重寫DS.RESTAdapter的某些方法。如果你的endpoing不符合這種格式。

其他錯誤是不存在的DS.attr('int')只是DS.attr('number')。但是您可以刪除標識映射,因爲它是默認創建的。

這是該工作http://jsfiddle.net/marciojunior/W5LEH/

+0

謝謝。我明白了我的數據格式不符合Ember的要求。 –

+1

如果這解決了你的問題。你能接受這個問題嗎? –

相關問題