Ember-data queryRecord不更新模板

时间:2016-03-09 17:21:56

标签: javascript ember.js ember-data ember-cli

  • Ember:2.3.0
  • Ember数据:2.3.2

我正在使用 DS.JSONAPIAdapter

使用 queryRecord 获取数据时,我无法更新模板,但数据已正确加载。

export default Ember.Route.extend({
  model: function(params) {
    return this.store.queryRecord('question', {
      id: params.id,
      //include: 'question.something,question.otherthing'
    });
  }
});

使用 findRecord 获取数据时,模板会更新。

export default Ember.Route.extend({
  model: function(params) {
    return this.store.findRecord('question', params.id);
  }
});

如果我这样做:

export default Ember.Route.extend({
  model: function(params) {

    if (this.store.hasRecordForId('question', params.id)) {
      return this.store.peekRecord('question', params.id);
    }

    return this.store.queryRecord('question', {
      id: params.id
      // include: ''
    }).then(function(result){ return result; });
  }
});

我第一次去路线时,会加载数据,但模板不会更新。第二次使用 peekRecord()并更新模板。

如何在使用queryRecord时更新模板? 感谢。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。

我的后端使用json-api规范。

当我使用上面的queryRecord()时,请求命中:

  

http:////api/questions?id=1&include=answers

,数据响应是一个集合:

{
    "data": [
        {
        }
    ]
}

我需要点击

  

http:////api/questions/1/?include=answers

此时此刻很痛苦,黑客就是:

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {

    urlForFindRecord(id, modelName, snapshot) {
    let url = this._super(...arguments);
    let query = Ember.get(snapshot, 'adapterOptions.query');
    if (query) {
      url += '/?' + Ember.$.param(query); // assumes no query params are present already
    }
    return url;
  },
});


export default Ember.Route.extend({
  model: function(params) {

    return this.store.findRecord('question', params.id, {
      adapterOptions: {
        query: {
          include: 'answers',
          limit: 1
        }
      }
    });
  }
});