我正在尝试在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"
});
}
});
我很确定它正确地引用了“导入人”,因为如果错误,我会看到关于找不到文件的错误。
然后在服务中,我得到了:
# /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类的任何指针将不胜感激。 谢谢!
我将尝试解决我认为的一些误解。
首先,您有一个Person类,但它不是DS.Model
因此您将无法通过Ember Data( this.store
)使用它。
可以在router.js
文件中定义路由, 如指南中所示 。 您似乎将其与如何指定路线的模型混淆了? 请密切注意代码示例中的文件路径。
至于服务,未定义Person
因为与您的router.js
代码不同,您没有将Person
导入模块。 导入是按模块import Person from './models/person';
,因此您还需要import Person from './models/person';
为您服务。 检查jsmodules.io以获取更多信息。
灰烬数据的商店被注入Route
S和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
发布的代码
您需要在引用它的每个文件中导入Person。
import Person from './models/person';
添加import Person from './models/person';
您的服务等级。