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"
    });
  }
});