我使用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文件。
谢谢!
答案 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"
});
}
});