Backbone.js 使主干集合的URL动态
我是BackboneJS的新手 我有一个场景,我想让我的收藏的URL完全动态 以下是我想从中加载收藏的两个URL:Backbone.js 使主干集合的URL动态,backbone.js,backbone.js-collections,Backbone.js,Backbone.js Collections,我是BackboneJS的新手 我有一个场景,我想让我的收藏的URL完全动态 以下是我想从中加载收藏的两个URL: 两个URL都返回相同的集合,区别在于第一个URL返回所有结果,而第二个URL基于搜索条件 我的表单中有一个搜索字段,根据搜索字段是空的还是包含搜索值,我想在这些URL之间切换。我在视图中看到的所有示例都是do records filter,或者我看到的唯一动态url是在现有url中添加一个id以获取单个记录而不是所有记录 因此,我的第一个问题是:如何为我的收藏实现这种动态URL
两个URL都返回相同的集合,区别在于第一个URL返回所有结果,而第二个URL基于搜索条件 我的表单中有一个搜索字段,根据搜索字段是空的还是包含搜索值,我想在这些URL之间切换。我在视图中看到的所有示例都是do records filter,或者我看到的唯一动态url是在现有url中添加一个id以获取单个记录而不是所有记录 因此,我的第一个问题是:如何为我的收藏实现这种动态URL抓取 我的第二个问题是:如何根据搜索字段值对集合进行不同的调用,以便集合选择适当的值
someCollection = Backbone.Collection.extend({
url: function() {
if(this.searchName!=null)
return baseURL + "/" + "searchByName" + "/" + this.searchName;
else
return base_URL;
},
search: function(searchTerm)
{
console.log("Search Term =" + searchTerm);
var results = new someCollection();
results.searchName = searchTerm;
results.fetch({
success: function()
{
vent.trigger("search:results", results);
},
error: function(collection, response){}
});
},
parse: function(response, options)
{
return response;
}
});
到目前为止,我的收藏代码是这样的,但我认为我走的方向不对。试试这样的方法:
var SomeCollection = Backbone.Collection.extend({
url: function() {
if (this.searchName) {
return this.baseURL + "/" + "searchByName" + "/" + this.searchName;
} else {
return this.baseURL;
}
},
searchName: null,
search: function(searchName) {
console.log("Search Name =" + searchName);
this.searchName = searchName;
this.fetch({
success: function() {
vent.trigger("search:results", results);
},
error: function(collection, response){
console.log("Something went wrong");
}
});
},
parse: function(response, options) {
return response;
}
});
var aFilteredCollection = new SomeCollection();
aFilteredCollection.search("Name goes here");
var aNonFilteredCollection = new SomeCollection();
aNonFilteredCollection.search();
它能正常工作吗?对我来说奇怪的是,你正在你的收藏中创建一个新的收藏。代码工作正常,但我知道这不是正确的方法。此外,我在两个URL之间切换时遇到问题,因此我必须显式调用集合中的方法来重新加载它。您不必担心URL。这是一个函数,因此每次需要时都会调用它,这使它成为您想要的动态。感谢Adrian,现在我要问第二个问题,如何根据用户输入切换刷新/重置收藏。我的想法是捕获搜索输入的keyup事件,并在此基础上刷新集合。如果用户输入为null,则集合应获取所有记录。您能否澄清“如何调用我的集合”的含义?类似于:someCollection.search(null)的内容也可以获取整个列表?好的,谢谢您的帮助,我没有看到完整的卷轴。但这会重置我以前的收藏吗?设想一个场景,其中搜索方法在每个关键点都被调用;对搜索方法的第二次调用是否会重置集合?我计划从集合中删除trigger方法,如果有意义的话,在集合的视图中删除listenon方法。然后,我甚至在我的视图中捕获了keyup,该视图执行如下操作:searchByName:function(e){this.collection.search($(“#searchValue”).val();},我在视图this.listenTo的初始化函数中添加了以下行(this.collection,'change',this.render);但是,即使我的集合正在刷新,我的视图也不会刷新。我在这里可能缺少什么?