0

我正在更新一个表单,我想在服务器上发出一个更新请求,我的模型是:

    var CampaignEditModel = Backbone.Model.extend({
    urlRoot:"http://localhost:3033/campaign/update/",
    url : function(){
       var url = this.urlRoot + this.id;
        return url;
    },
    idAttribute: "_id",
    defaults:{
        "id":null ,
        "Name" :""            
    }
});

渲染函数在这里被调用:

  $contents.empty().append(new EditView({model:editCampaigns}).render({id:id}).el);

和渲染功能是:

render: function(options){
        this.$el.append( _.template(EditTemplate));
        this.model.set({"id":options.id})
        console.log(this.model.get("id"));
        this._modelBinder.bind(this.model, this.el);
        return this;
    },
    events: {
        'click .saveCampaign ': 'save'

    },
    save:function(){
        this.model.set({
            "Name" :$('#edname').val(),
        });
        this.model.save(null, {success: function(data){
            console.log("data:" + data);
            require(['campaignroute'],function(routes){
                var router = routes.pageRouter;
                router.navigate('gridView', {trigger: true});
            });
        }});
        return false;
    }

问题是即使我在模型中设置了一个 id 仍然在调用 save 方法时请求像这样

http://localhost:3033/campaign/update/undefined

和控制台显示错误:

Failed to load resource: the server responded with a status of 404 (Not Found)

如何解决这个问题呢?

4

2 回答 2

1

与其传递options给您的自定义render(options)函数并在那里设置模型,不如在输入之前id直接在模型上设置它:editCampaignsrender(options)

editCampaigns.set('id', id);
$contents.empty().append(new EditView({model:editCampaigns}).render().el);

并删除多余的

this.model.set({"id":options.id})

render(options)options参数一起。它应该类似于以下内容:

render: function(){
    this.$el.append( _.template(EditTemplate));
    console.log(this.model.get("id"));
    this._modelBinder.bind(this.model, this.el);
    return this;
}

您的模型还有一个额外的url功能:

url : function(){
   var url = this.urlRoot + this.id;
    return url;
}

您不需要这个,因为模型id会自动附加到urlRoot.


与你无关的问题我看到你用过

http://localhost:3033/campaign/update

定义您的更新 URL。您使用的 HTTP 方法已经说明了将执行什么样的操作,这就是您可以(并且应该)编写不带动词的 URL 的原因。只需删除额外的/update

以下是关于最佳实践的快速总结: 如何创建没有动词的 REST URL?

于 2013-05-30T10:15:21.357 回答
1

仔细检查请求是 post 请求而不是 put 请求。“加载资源失败”错误通常与缺少请求处理程序有关。

于 2013-05-30T10:52:59.560 回答