将findQuery与FixtureAdapter一起使用

时间:2013-02-15 13:58:10

标签: ember.js ember-data

当我开发应用程序时,我使用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会为我处理这件事。

2 个答案:

答案 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