Ember Data Store Find在第二次调用时返回空内容

时间:2014-09-18 09:10:59

标签: ember.js ember-data ember-router

我有一个带有Fixtures数据集的模型,所以这里没有后端。对于模型,我有22个数据记录。当我第一次在我的IndexRoute中查询它时,返回所有22个数据记录。这里没问题。

当我离开路线并稍后返回时,我的IndexRoute的模型钩子再次被调用,但这次同一查询不会返回数据。

我的模型钩子看起来像:

model: function () {
    var placeId = 0;

    console.log('Index Route: Model Hook');
    console.log('Getting hints for place ' + placeId);

    this.get('store').find('hint', { place: placeId })
        .then(
            function (hints) {
                console.log('Found hints', hints.get('content'));
            }
        );

    return this.get('store').find('hint', { place: placeId });
}

如您所见,出于演示目的,我总是查询地点ID等于零的提示。如前所述,它第一次返回数据(我可以看到Chrome Ember Inspector中的数据),但是第二次进入此路径时不会返回数据(我知道那里有数据)。

编辑: 我的提示模型看起来基本上像

App.Hint = DS.Model.extend({
    title: DS.attr('string'),
    // some basic boring attributes
    place: DS.belongsTo('place', { async: true }) // Association with my Place Model
});

App.Place = DS.Model.extend({
    title: DS.attr('string'),
    // some more attributes
    hints: DS.hasMany('hint', { async: true })
});

因此,查询{place: placeId}只会获取与特定位置关联的所有提示。问题不在于查询不起作用 - 它在第一次触发索引路由时起作用(并且它按预期的方式工作)。问题是索引路由的所有后续调用以及尝试访问提示的所有其他位置都不再起作用,并且总是返回一个空集。

2 个答案:

答案 0 :(得分:1)

最后我找到了答案。问题似乎与通过与我的地方的belongsTo关联找到提示记录有关。

无论如何,我发现这篇文章Find record from belongsTo association in Ember.js,这就是实际解决方案的样子:

model: function () {
    var placeId = 0;

    return this.store.find('place', placeId)
        .then(function (place) {
            return place.get('hints');
        })
        .then(function (hints) {
            return hints;
        });
},

答案 1 :(得分:0)

我对{ place: placeId }应该做什么感到有点困惑,因为我不确定fixtureAdapter是否可以模仿服务器查询(从未尝试过)。

然而,如果您希望您的路线始终返回灯具数据中的所有“提示”,那么您需要做的就是:

return this.store.find('hint');

注意:您只需要拨打一次电话。

如果仍然不起作用。尝试发布你的灯具数据和适配器的样子。