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

时间:2015-01-26 18:19:03

标签: 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'));
  }
});

我已经检查过“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"
    });
  }
});

嗯......它不起作用。控制台说:处理路径时出错: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'); 
  });

});

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

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

谢谢!


增加:

感谢丹尼尔和巴克的快速回复,我已经检查了它们并且确实有效。

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

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

以下是models.js的示例内容:

从“ember”导入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;

然后,在你的路线javascript中,你可以这样使用它:

import models from '../models';

export default Ember.Route.extend({
  model: function() {
    return models.Estado.findAll();
  }
});

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

谢谢!

2 个答案:

答案 0 :(得分: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'));
  }
});

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

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

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

如果你没有使用Ember Data,你也可以将其删除。正如它建议in the documentation,运行:

npm rm ember-data --save-dev

答案 1 :(得分:4)

首先,不要在Ember CLI中使用App.。您使用CLI和导入/导出来分离模块,您不应该访问全局App变量 - 即使它已被定义。

  

我删除了person.js并手动创建了一个名为models.js的js文件(我将在那里宣布我所有的ember对象

我不确定它是否可行。你应该分开每个对象。一个对象 - 一个文件。与控制器,路由等类似。因此,在models.js目录中为app/models对象创建文件 - Person,而不是使用一个文件 - person.js。文件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;

然后,在您的路线中,您必须导入此对象,以便您可以使用它:

import Ember from 'ember';
import Person from './../models/person';
# I'm not sure if this is correct path - if it produces an error try adding more .. until it works - I' don't know where your route is located

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