未捕获的TypeError:无法读取未定义的属性“createRecord”

时间:2015-03-11 19:13:36

标签: ember.js

我尝试用很多不同的方式编写这段代码但它返回了这个错误:

  

未捕获的TypeError:无法读取未定义的属性“createRecord”

App.StackFormComponent = Ember.Component.extend({
    init: function() {
        this.set('stack', Ember.Object.create());
    },

    actions: {
        submit: function() {

            var newStack = this.store.createRecord('stack', {
                title: this.get('stack.title'),
                location: this.get('stack.location'),
                date: new Date().getTime(),
                details: this.get('stack.details'),
            });

            newStack.save();
        },

        cancel: function() {
            this.sendAction('cancel');
        }
    }
});


App.Stack = DS.Model.extend({
    title: DS.attr('string'),
    location: DS.attr('string'),
    date: DS.attr('number'),
    details: DS.attr('string')
});

不幸的是,类似问题的答案没有帮助。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

Ember将store注入路由和控制器,但不注入组件,因此这是您的问题。

您可以继续将store注入初始化程序内的组件中,如下所示:

Ember.onLoad('Ember.Application', function(Application) {
  Application.initializer({
    name: "injectStoreIntoMyComponent",
    after: "store",
    initialize: function(container, application) {      
      application.inject('component:good-test-comp', 'store', 'store:main');
    }
  });
});

工作示例here

答案 1 :(得分:0)

将商店注入组件并不是一个好的设计。您可以将其作为参数{{my-component store=store}}传递。

答案 2 :(得分:0)

在组件中注入商店并不是一个好的设计。相反,我们需要将数据发送到组件并发送操作以与数据进行通信。如果您仍想将其作为特例包含在内,那么您可以简单地说,

store: Ember.inject.service()