0

下面是我用来从 Web API 获取数据的代码。但是每次我尝试检索数据时,我都会遇到同样的错误:Unable to set property 'store' of undefined or null reference in ember.js

/// <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;
    }
});
4

2 回答 2

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'),
});

如果您想使用大写的属性,如Name, Category。您将需要覆盖 DS.RESTAdapter 的一些方法。如果您的端点与此格式不匹配。

其他错误是不存在DS.attr('int')just DS.attr('number')。但是您可以删除 id 映射,因为它是默认创建的。

这是一个 jsfiddle 这个工作http://jsfiddle.net/marciojunior/W5LEH/

于 2013-10-02T15:57:32.450 回答
0
  1. 确保您使用的是最新版本的 Ember.js 和 Ember-Data。
  2. 这是您为应用程序定义商店的方式:
App.Store = DS.Store.extend({
    adapter: App.ApplicationAdapter
});

注意和而不是S的大写字母。Storeextendcreate

请参阅Ember 数据指南

于 2013-10-02T12:17:16.677 回答