我正在使用Ember.js(v1.2.0)和一个返回分页JSON数据的API,如下所示:
{
"count": 5,
"next": "http://127.0.0.1:8000/some/resource/?page=2",
"previous": null,
"results": [
{
"id": 37,
"title": "Some title",
"description": "Some description",
},
{
"id": 35,
"title": "Sdflskdf",
"description": "sdfkdsjf",
},
{
"id": 34,
"title": "Some other title",
"description": "Dsdlfksdf",
},
]
}
我不使用ember-data,所以我使用普通的ember对象作为我的模型并加载这样的数据:
App.SomeResource = Ember.Object.extend({});
App.SomeResource.reopenClass({
find: function () {
return $.getJSON('/some/resource/').then(function (response) {
return response.results.map(function (data) {
return App.SomeResource.create(data);
});
});
},
});
我的model类上的find方法返回一个promise,它解析为一个对象数组。在创建SomeResource对象时,所有分页数据都将丢失。
当承诺结算时,有没有办法在某处存储count
,next
和previous
页面网址?
答案 0 :(得分:0)
我将它们分配给全局对象,但你应该做得更好。
App.SomeResource = Ember.Object.extend({});
App.SomeResource.reopenClass({
find: function () {
return $.getJSON('/some/resource/').then(function (response) {
return RSVP.all(response.results.map(function (data) {
return App.SomeResource.create(data);
})).then(function(createdResources) {
window.count = response.count;
window.next = response.next;
window.previous = response.previous;
return createdResources;
});
});
}
});
答案 1 :(得分:0)
我没有将这些元数据存储在全局window
对象上,而是想出了这个:
App.SomeResource.reopenClass({
find: function () {
var url = '/some/resource/';
return Ember.$.getJSON(url).then(function (response) {
response.results = response.results.map(function (resource) {
return App.SomeResource.create(resource);
});
return response;
});
},
});
SomeResource.find()
只是从结果数组中实例化Ember对象,然后返回响应,其余数据不变。然后路线接收响应,并在setupController
函数中设置分页数据和:
App.SomeResourceRoute = Ember.Route.extend({
model: function () {
return App.SomeResource.find();
},
setupController: function(controller, model) {
controller.setProperties({count: model.count,
pageCount: model.page_count,
currentPage: model.current_page,
pageRange: model.page_range,
previous: model.previous,
next: model.next,
model: model.results,});
},
});
它有效,但也许有更好的方法。