0

我正在使用一个测试 .json 文件,并且可以成功地控制台记录 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;
},
4

2 回答 2

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);
}

希望有帮助。

于 2012-08-14T04:28:57.050 回答
0

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

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

于 2012-08-14T04:44:11.800 回答