我尝试在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类的任何指示。谢谢!
答案 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的商店仅注入Route
和Controllers
,这就是this.store
中Service
未定义的原因。如果要访问商店,请执行以下操作:
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';
添加到您的服务类。