我正在使用一个测试.json文件,并且可以在控制台上成功记录网址,但是我现在尝试将参数附加到网址并忽略它们。
这是视图的样子,工作正常,成功消息与测试json文件一起出现:
busImportSearch: function() {
importSelect.fetch({
data: {
importPhone: '5555555555',
busImportName: 'test business',
busImportCID: '12345',
busImportBID: '1234567890'
},
success: function(results) {
// url console.log's fine just no params
}
});
}
这就是我在集合中所拥有的:
var importSelect = Backbone.Collection.extend({
model: importModel,
url:'somepath/test.json',
sync: function(method, model, options) {
options.timeout = 10000;
options.dataType = "json";
return Backbone.sync(method, model, options);
},
parse: function(response) {
console.log(this.url);
if (typeof response.data !== 'undefined') {
this.result = response.data.list;
}
return this.result;
},
});
return new importSelect;
});
我认为这是有效的,但我认为有更好的方法:
url: function() {
var busimportPhone = $("#busImportPhone").val();
var busImportName = $("#busImportName").val();
var busImportCID = $("#busImportCID").val();
var busImportBID = $("#busImportBID").val();
var updateUrl = 'test.json' + '?importPhone=' + busimportPhone + '&importName=' + busImportName + '&importCID=' + busImportCID + '&importBID' + busImportBID; return updateUrl;
},
答案 0 :(得分:2)
这不是更好,但您可以将集合中的属性列表存储在某处,并从那里创建URL。例如
importSelect.myDataList = {
importPhone: '5555555555',
busImportName: 'test business',
busImportCID: '12345',
busImportBID: '1234567890'
};
importSelect.fetch({ ... });
使用类似(代码未测试)
之类的函数构建您的网址function constructUrl(data) {
var result = "";
var count = 0;
for(var i in data) {
var prefix = "&";
if(count == 0) {
prefix = "?";
}
result += prefix + i + "=" + data[i];
}
return result;
}
并使用函数创建Url
...
url: function() {
return constructUrl(this.data);
}
希望有所帮助。
答案 1 :(得分:0)
我认为您通过定义url
函数走在正确的道路上,只需从您的集合中获取这些查询参数,而不是直接从您的页面中获取。该集合应该能够知道加载了哪种项目,因此以某种方式将查询参数与集合实例一起存储是有意义的。在过去,我在Collection定义中使用了一个对象。但是要小心,否则你最终会得到一个由所有这些集合实例共享的对象。
Side注意:我之前一直在试图设置,以便对于可以通过各种查询参数查询生成的任何集合,将存在仅建模查询参数的关联模型。通过模型和集合之间的事件绑定,更改模型的值然后可以自动触发集合中的提取。但这是一个合理的触发器吗?我不确定。