Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 使主干集合的URL动态_Backbone.js_Backbone.js Collections - Fatal编程技术网

Backbone.js 使主干集合的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

我是BackboneJS的新手

我有一个场景,我想让我的收藏的URL完全动态

以下是我想从中加载收藏的两个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);但是,即使我的集合正在刷新,我的视图也不会刷新。我在这里可能缺少什么?