2015-01-26 46 views
4

我使用Ember-CLI构建我的烬应用程序,但我不想使用Ember数据。默认情况下,当您输入以下命令时:ember generate model Person,ember-cli会在名为“person.js”的模型下创建一个js文件,并且它将成为DS.extend(...)。我不希望这样,我想要一个普通的烬对象。所以...我删除了person.js并手动创建了一个名为models.js的js文件(这就是我要声明所有我的ember对象的地方)。没有Ember数据的Ember-CLI,使用普通的烬对象代替

下面是我在models.js:

import Ember from "ember"; 

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

我已经检查了“应用程序”是可用的(有一个名为应用程序在app.js宣布变种 - 由EmberCLI产生的 - 这是出口)。

所以......现在...我想从我的路线中使用它。我有类似的东西(在“路线”下名为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'); 
    }); 

}); 

原来, “应用程序” 不承认任何地方(甚至不是从models.js)。

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

谢谢!


增加:

感谢丹尼尔和巴克的及时答复,我检查了他们和它的作品。

虽然我仍然固执,试图把所有的对象定义放在一个单独的js文件(models.js)中...我现在发现了它。

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

这里的models.js的样本内容:

进口灰烬从 “烬”;

​​

然后,在你的路线JavaScript中,可以使用这种方式:

import models from '../models'; 

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

只是一个选择,如果你认为有针对您的项目每个域模型矫枉过正单独的js文件。

谢谢!

+0

如果你有一个新的问题,你应该开始一个新的问题!我甚至没有看到你更新了你的问题。 – 2015-01-26 23:15:12

回答

5

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

如果你不使用灰烬的数据,你可能也只是去掉它。因为它表明in the documentation,运行此:

所有的
npm rm ember-data --save-dev 
+0

如果您将它用于一个项目而不是另一个项目,那么npm命令不会将其全局删除吗? – Leahcim 2015-05-24 12:22:26

+0

@Leahcim,不会的。默认情况下,Ember CLI在'node_modules'目录中安装一个本地的ember-data副本;该命令将其删除。除非使用'-g'标志,否则npm不会删除全局安装的东西。 – 2015-10-04 08:07:16

4

首先,不要在灰烬CLI中使用App.。使用CLI和导入/导出来分离模块,并且不应该访问全局变量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" 
    }); 
    } 
}); 
+0

嗨,谢谢你的回复!但不能标出多个。 现在我试图坚持一个JS(models.js) - 仍然固执 - 我想也许我可以这样做:... 呃,让我把它放在格式的原始文章。 – 2015-01-26 18:43:00

+0

只有我想到的东西是依赖注入,可以帮助你。请参阅[本文](http://balinterdi.com/2014/05/01/dependency-injection-in-ember-dot-js.html),看看它是否有帮助。您可以创建对象,如商店或模型的集合,并将其推送到您的路线和控制器。 – 2015-01-26 18:45:24

相关问题