从服务访问Ember-cli模型类

时间:2015-11-16 10:56:05

标签: javascript ember.js

我尝试在Ember-cli项目中定义一个Person类,然后我可以在服务中调用它。我已经有一个基本服务工作,当各种输入被更改时更新,但我根本无法引用Person类。这就是我目前所拥有的:

# app/models/person.js 

import Ember from "ember";

var Person = Ember.Object.extend({
  helloWorld: function() {
    alert("Hi, my name is " + this.get('name'));
  }
});

export default Person; 

在路由器中我得到了:

# app/router.js

import Ember from 'ember';
import config from './config/environment';
import Person from './models/person';

var Router = Ember.Router.extend({
  location: config.locationType,
  model: function() {
    return Person.create({
      name: "Tom Dale"
    });
  }
});

我很确定它引用了" import Person"正确的,因为如果它错了我看到有关该文件未找到的错误。

然后在服务中我得到了:

# /app/services/calculator.js

import Ember from 'ember';

export default Ember.Service.extend({

  init: function () {

    // this gives "Person is not defined"
    const person = new Person();

    // this gives "Person is not defined"
    const person = Person.create({ name: "Tom Jones" });

    // this gives "store not defined" 
    const person = this.store.createRecord('person', { name: "Tom Jones" });

  },
});

我将非常感谢有关如何从服务访问Person类的任何指示。谢谢!

2 个答案:

答案 0 :(得分:2)

我会尝试解决我认为的一些误解。

首先,您有一个Person类,但它不是DS.Model,因此您无法通过Ember数据(this.store)使用它。

您的router.js文件是您定义路线的地方as shown in the guides。您似乎对如何specify a route's model感到困惑?密切关注代码示例中的文件路径。

对于服务,未定义Person,因为与router.js代码不同,您不会将Person导入模块。导入是按模块进行的,因此您的服务中还需要import Person from './models/person';。有关详细信息,请查看jsmodules.io Ember Data的商店仅注入RouteControllers,这就是this.storeService未定义的原因。如果要访问商店,请执行以下操作:

export default Ember.Service.extend({
  store: Ember.inject.service(),

  init() {
    const person = this.get('store').createRecord('person', { name: "Tom Jones" });
  }
});

请注意,上面的不应该,因为您Person发布的代码不是DS.Model

答案 1 :(得分:1)

您需要在引用它的每个文件中导入Person。

import Person from './models/person';添加到您的服务类。