TypeError:无法在ember.js中设置未定义或空引用的属性“store”

时间:2013-10-02 12:00:01

标签: ember.js

以下是我用来从Web API获取数据的代码。但每次我尝试检索数据时都会得到同样的错误:无法在ember.js 中设置未定义或空引用的属性'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;
    }
});

2 个答案:

答案 0 :(得分: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')不存在。但您可以删除id映射,因为默认情况下会创建。

这是一个有效的http://jsfiddle.net/marciojunior/W5LEH/

的jsfiddle

答案 1 :(得分:0)

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

    请注意SStore中的大写extend,而不是create

    请参阅Ember-Data Guide