这是我的代码(使用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
答案 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');
}
});
这应该正常输出夹具记录。