一直在搜索和阅读 ember-data 的源代码,但我无法弄清楚如何做到这一点。所以我的索引页面加载数据如下:
App.SaleRecordsRoute = Ember.Route.extend({
setupController: function(controller) {
controller.set('content', App.SaleRecord.find());
}
});
在服务器上,我只是用最新的 10 条记录进行响应。我还想做的是查询相同的网址,传递单个搜索字段。该搜索字段或条件会根据数据库中的一些字段进行检查。这些字段跨越连接语句中的几个不同模型,所以我认为我不能这样做:
App.SaleRecord.find({ book.title: critera });
Book 是属于记录。
在该路线的控制器中,这是我至少用于查询数据的内容,它按预期工作:
App.SaleRecordsController = Ember.ArrayController.extend({
search: function() {
$.getJSON('/search?criteria=' + $('.criteria').val(), function(data) {
});
}
});
但我不确定从这里该做什么。
- 如果某些记录由于是最后 10 个结果的一部分而已经在存储中,我是否需要先卸载它们?
- 如何将数据从 json 哈希加载到存储中?我知道如何创建一条记录并填充它,这样我就可以循环访问数据,但我想知道是否有一个衬里。
谢谢。我希望问题很清楚:)
设法找到答案,主要归功于这里的这个问题/答案:Ember.js Ajax 调用未按预期工作 https://stackoverflow.com/questions/15653525/ember-js-ajax-call-is-not-working-as-expected
我将 ajax 调用从控制器移至模型函数中。就像在链接的问题中一样,我创建了一个自定义函数来在控制器中调用:
LocalBookFinder.SaleRecord = DS.Model.extend({
isbn: DS.attr('string'),
price: DS.attr('number'),
condition: DS.attr('string'),
book: DS.belongsTo('LocalBookFinder.Book')
});
LocalBookFinder.SaleRecord.reopenClass({
search: function(criteria) {
var result = Ember.ArrayProxy.create({content: []});
var _this = this;
$.getJSON('/search?criteria=' + criteria, function(data) {
var ids = [];
var arr = data.sale_records;
for(var i = 0; i < arr.length; i++) {
var sale_record = arr[i];
if(ids.indexOf(sale_record.book_id) == -1) {
ids.push(sale_record.book_id);
}
}
var ajax_count = ids.length;
var sale_records = [];
for(var i = 0; i < ids.length; i++) {
$.getJSON("/books/" + ids[i], function(data) {
for(var j = 0; j < arr.length; j++) {
var sale_record = arr[j];
if(sale_record.book_id == data.book.id) {
sale_record.book = data.book;
sale_records.push(sale_record);
}
}
if(i == ajax_count) {
console.log(sale_records);
result.set('content', sale_records);
}
});
}
});
return result;
}
});
然后在控制器中,我只需执行以下操作:
search: function() {
var _this = this;
var result = LocalBookFinder.SaleRecord.search($('.criteria').val());
this.set('content', result);
}
我认为模型中搜索功能的第一个 ajax 位非常简单。它请求数据,并设置一个空的 ember 数组代理来存储它。现在,由于我正在从子记录加载书籍图像和标题,所以我需要单独调用它们。因此,对于第一个结果集,我填充了我需要请求的图书 ID 数组。对于每个 ajax 调用,我都会遍历销售记录数组,并将 book 属性设置为结果哈希数据。完成后(通过计数器),我使用 JSON 数据设置结果内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)