主干.js将 url 参数传递给集合

Backbone.js passing url parameter to collection

本文关键字:集合 参数传递 url js 主干      更新时间:2023-09-26

我正在使用测试.json文件并且可以控制台.log成功时url很好,但是我现在正在尝试将参数附加到url并且它们被忽略了。

这是视图的样子,工作正常,并且显示带有测试 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;
},

这并没有好很多,但是您可以将集合上的属性列表存储在某个位置,并从那里创建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: function() { 
    return constructUrl(this.data);
}

希望有帮助。

我认为通过定义url函数,您走在正确的道路上,只需从集合中获取这些查询参数,而不是直接从页面中获取即可。 集合应该能够知道加载了哪种项,因此以某种方式将查询参数与集合实例一起存储是有意义的。 过去,我在集合定义中使用过对象。 但要小心,否则最终可能会得到一个由所有这些集合实例共享的对象。

旁注:我之前一直想进行设置,以便对于可以通过各种查询参数查询生成的任何集合,都会存在一个仅对查询参数进行建模的关联模型。 通过模型和集合之间的事件绑定,更改模型的值可以自动触发集合中的提取。 但这会是一个合理的触发因素吗?我不确定。