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 model.save不更新模型值_Backbone.js - Fatal编程技术网

Backbone.js model.save不更新模型值

Backbone.js model.save不更新模型值,backbone.js,Backbone.js,我正在努力学习Backbone.js,但遇到了一个问题。model.save不会更新我的模型值,尽管model.fetch会更新该值 请查看下面的代码,如果我在这里做错了什么,请告诉我: 型号 var Person = Backbone.Model.extend({ url: "CreatePerson", defaults: { name: "", age: 0 }, initialize: function(){ this.on("

我正在努力学习Backbone.js,但遇到了一个问题。model.save不会更新我的模型值,尽管model.fetch会更新该值

请查看下面的代码,如果我在这里做错了什么,请告诉我:

型号

var Person = Backbone.Model.extend({

    url: "CreatePerson",
    defaults: {
        name: "",
        age: 0
    },
initialize: function(){

this.on("change:name",function(){

        alert("Updated value is: "+this.get("name"));
    });
    }

});
我正在html页面上创建此模型的实例,下面是代码:

var person = new Person({name:"manish"});

person.save(person,{

        wait: true,
        success: function(){
            alert("Data saved: "+person.toJSON().name);
        },
        error: function(){
            alert("Sorry, something wrong went with the system");
        }       
    });
person.fetch({

        success: function(){
            alert("Data Fetched: "+person.get("name"));
        }
    });
在save和fetch上,我从服务器返回以下JSON数据:

{"name":"Logan","age":23}
有趣的是,对于save,不触发change事件,警报框给我旧的模型值(即manish),而当fetch函数执行时,触发change事件,fetch回调给我新的值(即logan)

有人能帮我找出我做错了什么吗?

来自backbonejs.org

使用新属性调用save将导致“更改”事件 立即启动,并在服务器确认 成功的改变。如果您想等待消息,请传递{wait:true} 在模型上设置新属性之前,请单击服务器


听起来服务器还没有返回它已经完成的消息。删除wait:true将触发已更改的事件。

代码中有错误:

person.save(person,{

您应该为save调用或选项提供属性对象,而不是模型本身。移除
人员,
并检查其是否有效<代码>等待:应设置true,以确保更改为服务器验证的正确数据。

不确定是否需要,但服务器是否为保存(
POST
)请求返回状态代码
201
(已创建)?返回200,表示操作成功。确定。我将尝试删除wait=true,尽管请求已完成。我已经在Mozilla中使用firebug进行了调试,并确认请求已完成。我需要显式地将新值分配给模型吗?老实说,我从未在model.save上使用wait:true属性,我假设您可能需要重新轮询服务器或其他什么?我知道,如果不等待:true,成功(模型,响应)回调中的数据应该是保存的数据。在我的成功回调中,我没有传递模型或响应。这可能是原因吗?可能是,尽管我认为主干网为方法提供了对象,而不管它们是否在函数参数中指定。如果在服务器端进行验证,并且在等待服务器响应之前使用不正确的数据更新视图,则实际上是有意义的。如果我想更改模型的所有属性,那么我应该传递所有属性还是传递模型本身呢?默认情况下,服务器总是获取整个主干模型,但save调用只需要必须更改的属性(或者不需要,如果模型已经包含model.set或类似的更改的属性,则模型是新的,所以只需要调用save而不需要属性)