3

我正在尝试学习 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"));
        }
    });

在保存和获取时,我从服务器返回以下 JSON 数据:

{"name":"Logan","age":23}

有趣的是,为了保存,change 事件没有被触发,并且警报框给了我旧的模型值(即 manish),而当 fetch 函数执行时,change 事件被触发并且 fetch 回调给了我新的值(即 logan) .

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

4

2 回答 2

1

来自backbonejs.org

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

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

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

于 2012-11-25T15:35:38.510 回答
0

您的代码中有错误:

person.save(person,{

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

于 2012-11-25T20:50:32.700 回答