Ember-CLI 没有 Ember 数据,使用纯 ember 对象代替
Ember-CLI without Ember Data, use plain ember object instead
我使用 Ember-CLI 构建我的 ember 应用程序,但我不想使用 Ember 数据。
默认情况下,当您键入此命令时:ember 生成模型 Person,ember-cli 会在名为 "person.js" 的模型下创建一个 js 文件,它将是一个 DS.extend(...)。我不想要那个,我想要一个普通的 ember 对象。所以...我删除了 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.
谢谢!
加法:
感谢 Daniel 和 Buck 的及时回复,我已经检查过了并且有效。
尽管如此,我还是很固执,试图将所有对象定义放在一个单独的 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 文件是多余的。
谢谢!
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'));
}
});
在路由文件中,导入并使用模型class:
import Ember from 'ember';
import Person from '../models/person';
export default Ember.Route.extend({
model: function() {
return Person.create({
name: "Tom Dale"
});
}
});
如果您不使用 Ember 数据,您最好将其删除。正如它所暗示的那样 in the documentation,运行 这个:
npm rm ember-data --save-dev
首先,不要在 Ember CLI 中使用 App.
。您使用 CLI 和 imports/exports 来分隔模块,您不应该访问全局 App
变量 - 即使它已定义。
I delete the person.js and create manually a js file named models.js (that's where I'm going to declare all my ember objects
我不确定是否可行。你应该分开每个对象。一个对象 - 一个文件。类似于控制器、路由等。因此,与其使用一个文件 - 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"
});
}
});
我使用 Ember-CLI 构建我的 ember 应用程序,但我不想使用 Ember 数据。
默认情况下,当您键入此命令时:ember 生成模型 Person,ember-cli 会在名为 "person.js" 的模型下创建一个 js 文件,它将是一个 DS.extend(...)。我不想要那个,我想要一个普通的 ember 对象。所以...我删除了 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.
谢谢!
加法:
感谢 Daniel 和 Buck 的及时回复,我已经检查过了并且有效。
尽管如此,我还是很固执,试图将所有对象定义放在一个单独的 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 文件是多余的。
谢谢!
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'));
}
});
在路由文件中,导入并使用模型class:
import Ember from 'ember';
import Person from '../models/person';
export default Ember.Route.extend({
model: function() {
return Person.create({
name: "Tom Dale"
});
}
});
如果您不使用 Ember 数据,您最好将其删除。正如它所暗示的那样 in the documentation,运行 这个:
npm rm ember-data --save-dev
首先,不要在 Ember CLI 中使用 App.
。您使用 CLI 和 imports/exports 来分隔模块,您不应该访问全局 App
变量 - 即使它已定义。
I delete the person.js and create manually a js file named models.js (that's where I'm going to declare all my ember objects
我不确定是否可行。你应该分开每个对象。一个对象 - 一个文件。类似于控制器、路由等。因此,与其使用一个文件 - 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"
});
}
});