Ember组件 - TypeError:存储未定义

时间:2016-02-14 06:23:21

标签: ember.js ember-data

我正在使用ember 2.3。当我尝试访问组件中的商店时,我在控制台中收到以下错误。

enter image description here

这是我在component.js

中尝试过的
export default Ember.Component.extend({

actions: {
  saveEmployee : function() {
      var store = this.store;

      var newEmployee = store.createRecord("employee", {
          fname: "Manu",
          lname: "Benjamin",
          email: "manu.benjamin@gmail.com",
          department: "IT Services"
      });

      newEmployee.save().then(()=> {
          console.log("Record successfully saved!!!!");
      });

  }
}
});

我是否需要在组件中包含任何使用商店的内容?

2 个答案:

答案 0 :(得分:7)

我试图弄清楚这种类型错误的原因。最后,我从 Josh Farrant 的以下博客中找到了解决方案。

https://blog.farrant.me/how-to-access-the-store-from-within-an-ember-component/

我们需要在组件中注入商店服务。

store: Ember.inject.service(),

我们可以使用get函数注入动作中的商店

let store = this.get('store');

我使用上述解决方案修改了我的代码,它对我有用。

export default Ember.Component.extend({

store: Ember.inject.service(),

actions: {

  saveEmployee : function() {
      var store = this.get('store');

      var newEmployee = store.createRecord("employee", {
          fname: "Manu",
          lname: "Benjamin",
          email: "manu.benjamin@gmail.com",
          department: "IT Services"
      });

      newEmployee.save().then(() => {
          console.log("Record successfully saved!!!!");
      });

  }
}
});

感谢 Josh Farrant 为这个好博客。

答案 1 :(得分:4)

此主题已经多次讨论过,我相信你可以找到很多关于这个问题的帖子。让我重复一下已经提到的内容:尽量避免在组件中直接使用存储。

如果您的设计允许您在相关路线或控制器中操作Ember存储(默认情况下商店可用btw),请尝试从组件发送操作以使其冒泡到控制器并在控制器中执行存储操作。可以 EmberJS guides - how to send actions from components为您提供帮助。