从服务访问Ember-cli模型类

问题描述 投票:0回答:2

我正在尝试在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类的任何指针将不胜感激。 谢谢!

javascript ember.js
2个回答
2
投票

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

首先,您有一个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发布的代码


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.