灰烬固定装置不起作用

时间:2014-09-09 12:07:13

标签: ember.js coffeescript ember-data fixtures ember-cli

这是我的代码(使用ember-cli):

app.coffee

`import Ember from 'ember'`
`import Resolver from 'ember/resolver'`
`import loadInitializers from 'ember/load-initializers'`

Ember.MODEL_FACTORY_INJECTIONS = true

App = Ember.Application.extend
  modulePrefix: 'dashboard' # TODO: loaded via config
  Resolver: Resolver


loadInitializers App, 'dashboard'

`export default App`

适配器/ application.coffee

`import DS from 'ember-data'`

ApplicationAdapter = DS.FixtureAdapter.extend()

`export default ApplicationAdapter`

模型/ mod.coffee

`import DS from 'ember-data'`

Mod = DS.Model.extend 
  name: DS.attr 'string'
  body: DS.attr 'string'
  summary: DS.attr 'string'
  category: DS.attr 'string'

Mod.reopenClass {
  FIXTURES: [
    {
      id: 1
      name: "First mod"
      body: "..."
      summary: "..."
      category: "api"
    },
    {
      id: 2
      name: "Second mod"
      body: "..."
      summary: "..."
      category: "api"
    }
  ]
}

`export default Mod`

但是在应用程序中,当我运行ember serve或浏览器conole时,没有任何内容被抛出(输出:

DEBUG: ------------------------------- vendor.js:27630
DEBUG: Ember      : 1.7.0 vendor.js:27630
DEBUG: Ember Data : 1.0.0-beta.8.2a68c63a vendor.js:27630
DEBUG: Handlebars : 1.3.0 vendor.js:27630
DEBUG: jQuery     : 1.11.1 vendor.js:27630
DEBUG: ------------------------------- vendor.js:27630
generated -> route:application Object {fullName: "route:application"} vendor.js:27630
generated -> route:index Object {fullName: "route:index"} vendor.js:27630
generated -> controller:application Object {fullName: "controller:application"} vendor.js:27630
Rendering application with default view <dashboard@view:toplevel::ember323> Object {fullName: "view:application"} vendor.js:27630
generated -> controller:index Object {fullName: "controller:index"} vendor.js:27630
Rendering index with <dashboard@view:index::ember339> Object {fullName: "view:index"} vendor.js:27630
Ember Debugger Active 

在ember检查器中,它向我展示了我的mod模型,但没有记录

以下是整个github回购https://github.com/OpenCubes/dashboard/tree/temp

2 个答案:

答案 0 :(得分:4)

好的2件事。

首先,如果要获取整个集合,则必须生成路径。我们积极生成的路线默认不会这样做。我认为这只是含糊不清,而且我们不想意外地获取整个数据源,因此我们将其留给用户todo。

// app/routes/mods.js
import Ember from 'ember';
export default Ember.Route.extend({
  model: function() { return this.store.find('mod'); }
});

第二,你必须在提供灯具时使用reopenClass。这是因为IE6 +没有办法将静态/类变量正确传播给后代。因此,ember实现了自己的机制。在将来某个时间点setPrototypeOf将可用,我们可以遵循这一点。在此之前,对于ember-cli应用程序,请使用余烬制裁方式。

import DS from 'ember-data';
var Mod = DS.Model.extend({...})
Mod.reopenClass({
  FIXTURES: [
  ...
  ]
});
export default Mod;

然后它起作用

答案 1 :(得分:1)

<强>更新

嗨,我已将该代码移至cli,基本上,我所要做的就是:

Mod创建适配器:

C:\>ember g adapter mod

然后我转到生成的Mod适配器的源代码,并将声明更改为从FixtureAdapter而不是RESTAdapter扩展。

import DS from 'ember-data';

export default DS.FixtureAdapter.extend();

另外,必须更改模型声明,它与您现在几乎相同。 无需创建商店或任何东西。


我真的不知道这是否是您遇到麻烦的原因,但是,您是否覆盖了商店中的适配器?我怀疑它可能没有使用你的适配器。

我做了一个快速示例(here),您可以将其作为参考。

请注意下面的示例中我将夹具适配器名称作为字符串传递给商店(还有其他方法可以执行此操作)。

App.ApplicationAdapter = DS.FixtureAdapter.extend();

App.Store = DS.Store.extend({
  // override default adapter
  adapter: 'ApplicationAdapter'
});

[ ... other code ... ]

App.Colour = DS.Model.extend({
  name: DS.attr('string'),
  hex: DS.attr('string')
});

// settings the fixtures directly in the model class
App.Colour.FIXTURES = [
  {id: 1, name: 'red', hex: '#F00'}, 
  {id: 2, name: 'green', hex: '#0F0'},
  {id: 3, name: 'blue', hex: '#00F'}
];

然后在我的路线中,我正常查询:

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('colour');
  } 
});

这应该正常输出夹具记录。