当我开发应用程序时,我使用FixtureAdapter在本地加载数据。
这是我的带有Fixture数据的页面模型:
App.Page = DS.Model.extend({
name : DS.attr('string'),
parent : DS.belongsTo('App.Page'),
subpages : DS.hasMany('App.Page')
});
App.Page.FIXTURES = [{
id: 1,
name: 'Home',
subpages: [ 2, 3, 4 ]
},{
id: 2,
name: 'About',
parent: 1
},{
id: 3,
name: 'Contact',
parent: 1
},{
id: 4,
name: 'Search',
parent: 1
},{
id: 5,
name: 'Blog',
parent: 2
}];
这是返回我的Fixture
中所有Page对象的代码App.PagesRoute = Ember.Route.extend({
model: function() {
return App.Page.find();
}
});
这是我的App.store:
App.store = DS.Store.create({
revision : 11,
adapter: DS.FixtureAdapter
});
这很好用,但如何返回根页面呢?
当我在return App.Page.find()
中更改App.Page.findQuery(App.Page,{ id: 1 })
时,出现以下错误:
Uncaught Adapter is either null or does not implement 'findQuery' method
- 更新 -
当我在return App.Page.find()
中更改App.Page.find({ name: 'Home' })
时,出现以下错误:
Uncaught TypeError: Cannot call method '_create' of undefined
我想这是因为那时我的数据没有被加载。但我认为Ember会为我处理这件事。
答案 0 :(得分:2)
适用于Ember Data 0.13:
App.fixtureStore = DS.Store.create({
adapter: DS.FixtureAdapter.extend({
queryFixtures: function(fixtures, query, type) {
return fixtures;
}
})
});
测试时一定要这样做:
App.store = App.fixtureStore;
DS.set('defaultStore', App.fixtureStore);
答案 1 :(得分:0)
这是定义商店的正确方法:
App.Store = DS.Store.extend({
revision : 11,
adapter: DS.FixtureAdapter
});
请注意扩展而非创建,商店中的大写字母 S 。 有关详细信息,请参阅Ember Guide。