Backbone fetch命中了错误的url

时间:2013-07-14 15:13:09

标签: backbone.js model fetch

我有以下骨干模型

define(["jquery", "underscore", "backbone"],
    function ($, _, Backbone) {
        var file_upload = Backbone.Model.extend({
        url: 'http://localhost:8080/rest/customForms'

    });

    return file_upload;
}

我在

加载了一个视图

本地主机:38559 /应用/ forms.html

尝试使用以下代码进行发布

var fd = document.getElementById('fileToUpload').files[0];
var file = new file_upload();
file.fetch({data: $.param({fileToUpload: fd}), 
    type: 'POST', 
    success: function(d){
        console.log('success');
    }
});

但这似乎只是对form.html传递fd作为参数的get请求。我也试过覆盖file_upload中的sync方法

sync: function (method, model, options) {
    var self = this;
    options = _(options).clone();

    var error = options.error;
    options.error = function (jqXHR, textStatus, errorThrown) {
        alert('error');
        if (error)
            error(jqXHR, textStatus, errorThrown);
    };

    var success = options.success;
    options.success = function (data, textStatus, jqXHR) {
        if (success && data) {
            alert("Success uploading form.");
            success(data, textStatus, jqXHR);
        }
        else
            alert("Error uploading form. Please try entering again.");
        };

        var params = {
            type: 'POST'
        };
        $.ajax(_.extend(params, options));
    }
}

我正在使用类似的代码在应用程序的其他部分发帖,所以无法弄清楚为什么使用此代码,fetch会对其调用的页面执行get请求,而不是发布到模型中指定的url的帖子。有没有人有任何想法?

谢谢, 真皮

1 个答案:

答案 0 :(得分:0)

呃 - 终于发现这个问题又回来了。文件上传已在按钮单击事件上完成。我需要调用preventdefault强制使用模型url而不是页面url。讨厌的问题 - 不知道我怎么错过它!现在的代码是

uploadForm: function (e) {
    e.preventDefault();
    var self = this;
    var fd = document.getElementById('fileToUpload').files[0];
    var file = new file_upload();
    file.fetch({data: $.param({fileToUpload: fd}), 
        type: 'POST', 
        success: function(d){
            console.log('success');
        }
    });
},