Ember-CLI没有Ember Data,而是使用普通的ember对象

Cok*_*aka 5 ember.js ember-cli

我使用Ember-CLI构建我的ember应用程序,但我不想使用Ember Data.

默认情况下,当您键入以下命令时:ember generate model Person,ember-cli将在名为"person.js"的模型下创建一个js文件,它将是一个DS.extend(...).我不想那样,我想要一个普通的余烬物.所以......我删除了person.js并手动创建了一个名为models.js的js文件(这就是我要声明所有ember对象的地方).

这是我在models.js中的内容:

import Ember from "ember";

App.Person = Ember.Object.extend({
  helloWorld: function() {
    alert("Hi, my name is " + this.get('name'));
  }
});
Run Code Online (Sandbox Code Playgroud)

我已经检查过"App"是否可用(在app.js中声明了一个名为App的应用程序 - 由EmberCLI生成 - 并且它被导出).

所以......现在......我想从我的路线中使用它.我有这样的东西(在"routes"下的一个名为person.js的js文件中):

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return App.Person.create({
      name: "Tom Dale"
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

嗯......它不起作用.控制台说:处理路由时出错:person.index App未定义ReferenceError:未定义App.

好的...我检查了生成的js文件(myproject.js):我发现了这个:

define('infoleccion2015/tests/models/models.jshint', function () {

  'use strict';

  module('JSHint - models');
  test('models/models.js should pass jshint', function() { 
    ok(false, 'models/models.js should pass jshint.\nmodels/models.js: line 3, col 1, \'App\' is not defined.\n\n1 error'); 
  });

});
Run Code Online (Sandbox Code Playgroud)

事实证明,"App"无法在任何地方被识别(甚至不是来自models.js).

我是EmberCLI的新手.谁能告诉我该怎么做?严格要求我们不能使用Ember-Data.

谢谢!


加成:

感谢Daniel和Buck的快速回复,我已经检查了它们并且它有效.

我仍然很顽固,试图将所有对象定义放在一个单独的js文件(models.js)中......现在我发现了如何.

首先,您可以创建一个js文件,我们将其命名为models.js.您不必将它放在models /目录下; 你可以把它直接放在app /下.

这是models.js的示例内容:

从"余烬"进口Ember;

var Estado = Ember.Object.extend({
  describe: function() {
    return "Hi, the estado is " + this.get("idEstado");
  }.property("idEstado")
});

var Distrito = Ember.Object.extend({
  describe: function() {
    return "Hi, the distrito is " + this.get("idDistrito");
  }.property("idDistrito")
});

var models = {
  Estado: Estado,
  Distrito: Distrito
};

export default models;
Run Code Online (Sandbox Code Playgroud)

然后,在您的Route javascript中,您可以这样使用它:

import models from '../models';

export default Ember.Route.extend({
  model: function() {
    return models.Estado.findAll();
  }
});
Run Code Online (Sandbox Code Playgroud)

只是一个替代方案,如果你认为你的项目的每个域模型过度杀戮都有单独的js文件.

谢谢!

Buc*_*yle 6

App.Person是基于全局变量的Ember应用程序的遗留物,它不再适用于Ember CLI世界.Ember CLI使用目录结构在需要时查找应用程序的各个部分.

将您的模型更改为:

import Ember from 'ember';

export default Ember.Object.extend({
  helloWorld: function() {
    alert("Hi, my name is " + this.get('name'));
  }
});
Run Code Online (Sandbox Code Playgroud)

在路径文件中,导入并使用模型类:

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

export default Ember.Route.extend({
  model: function() {
    return Person.create({
      name: "Tom Dale"
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

如果您没有使用Ember Data,您也可以将其删除.正如它在文档中建议的那样,运行:

npm rm ember-data --save-dev
Run Code Online (Sandbox Code Playgroud)