Ember-data使用store.find返回单个json对象

时间:2015-01-27 22:22:08

标签: ember.js ember-data

这可能吗?我知道我能做到:

this.store.find('model', 1) 

但那不是我想要的。我想以这种格式检索json :(如果我在这样的路径中检索它,则工作):

App.OptionsRoute = Ember.Route.extend({
model: function () {
    return {
        "options":{

            "id": "1",
            "headline": "A Headline",
            "results": [

                {
                    "id": "1",
                    "title": 'Option 1',
                },
                {
                    "id": "2",
                    "title": "Option 2"
                }
            ]
        }

    };
}
});

期权模型:

App.Options = DS.Model.extend({
headline: DS.attr(),
results: DS.attr()
});

options.hbs

    <h5>{{options.headline}}</h5>

    {{#each item in options.results}}
        <h5>{{item.title}}</h5>
    {{/each}}

我正在使用RESTAdapter。这是唯一将在该路线上检索的模型。我希望能够使用ember-data,但store.find需要一个数组。

1 个答案:

答案 0 :(得分:1)

你在这里错过了一点。首先,您使用错误的格式进行回复。您需要自定义序列化程序。您也可以使用这样一些更脏的解决方法(但它可以工作)。路线:

App.OptionsRoute = Ember.Route.extend({
  model: function() {
    that = this; 
    return new Promise(function (resolve, reject) {
      url = that.store.adapterFor('option').buildURL('option');
      Ember.$.getJSON(url).then(function (json) {
      body = json.options;
      correct = {
        options: [
          body
        ]
      };
      that.store.pushPayload('option', correct);
      resolve(that.store.all('option').get('firstObject'));
    });
    });
  }
});

模板:

<h5>{{model.headline}}</h5>

    {{#each item in model.results}}
        <h5>{{item.title}}</h5>
    {{/each}}

申请表输出:

A Headline
Option 1
Option 2

Working demo - 请注意我使用$.mockjax从服务器重新创建您的回复,但它与您提供的格式相符。