【问题标题】:model.save not updating model valuemodel.save 不更新模型值
【发布时间】:2012-11-25 11:06:02
【问题描述】:

我正在尝试学习 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 回调给我新的值(即洛根)。

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

【问题讨论】:

  • 不确定是否需要,但您的服务器是否为保存 (POST) 请求返回状态代码 201(已创建)?
  • 返回200,表示操作成功。

标签: backbone.js


【解决方案1】:

来自backbonejs.org

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

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

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

【讨论】:

  • 好的。尽管请求已完成,但我将尝试删除 wait = true。我已经在 Mozilla 中使用 firebug 进行了调试,并确认请求已完成。我是否需要明确地为模型分配新值?
  • 老实说,我从来没有在 model.save 上使用过 wait:true 属性,我假设您可能需要重新轮询服务器或其他什么?我知道无需等待:true 成功(模型,响应)回调中的数据应该是保存的数据。
  • 在我的成功回调中,我没有传递模型或响应。会不会是这个原因?
  • 它可能是,虽然我认为骨干为方法提供对象,无论它们是否在函数参数中指定。
  • 如果验证发生在服务器端并且您在等待服务器响应之前使用不正确的数据更新您的视图,这确实有意义。
【解决方案2】:

你的代码有错误:

person.save(person,{

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

【讨论】:

  • 如果我想改变我模型的所有属性,那么我应该传递所有属性还是传递模型本身?
  • 默认情况下,服务器总是获取整个 Backbone 模型,但保存调用只需要必须更改的属性(或者不需要,如果模型已经包含由 model.set 设置的更改属性或您的案例模型是新的,所以你只需要调用 save 没有属性)
猜你喜欢
  • 2019-07-20
  • 1970-01-01
  • 2014-12-24
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多