model.save没有更新模型值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了model.save没有更新模型值相关的知识,希望对你有一定的参考价值。

我正在尝试学习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,更改事件不会触发,警报框会给我旧的模型值(即manish),而当执行fetch函数时,会触发change事件并且fetch回调会给我新值(即logan) 。

有人可以帮助我找出我在这里做错了什么吗?

答案

来自backbonejs.org

http://backbonejs.org/#Model-save

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

听起来好像服务器没有返回它已完成。删除wait:true应该使更改的事件触发。

另一答案

您的代码中存在错误:

person.save(person,{

您应该为保存调用或仅选项提供属性对象,而不是模型本身。删除person,并检查它是否有效。应设置wait:true,以确保您更改为服务器验证的正确数据。

以上是关于model.save没有更新模型值的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 - 在model.save之后修改其他模型的属性

无法使用“model.save()”保存自定义模型

tf2 模型保存总结

Keras模型导入报错

通过 Model.save() 更新时触发 Mongoose 预保存挂钩

Keras模型保存的几个方法和它们的区别