0

这是代码:

var Person = Backbone.Model.extend({
        defaults: {
            name: "name",
            surname: "surname"
        },
        url: "/cgi-bin/test.pl",
        urlRoot: "/cgi-bin/test.pl"
    });

var person = null; 

$(document).ready(function(){
        person = new Person();
        person.set("name", "Alex");
        person.save({'name':'Jonh'}, {patch: true});
});

当我做

person.save({'name':'Jonh'}, {patch: true});

我看到带有有效负载的服务器的 POST 请求:

{“姓名”:“乔恩”,“姓”:“姓”}

但是为什么还传递了姓氏属性呢?我不想发送它。我只想发送名称属性。怎么做?

4

1 回答 1

4

surname被发送到服务器,因为是模型的defaults 属性之一。初始化模型时,Backbone 使用此对象预填充模型的属性。如果您想在保存到服务器时跳过此属性,您将必须创建一个具有模型属性但没有默认值的对象并将其传递给save方法:

var values = {};
_.each(person.attributes, function(value, key){  
       if (person.defaults[key] !== value){
          values[key]=value;
       }
});
person.save(null, {attrs: values, patch: true});

您也可以defaults从模型的声明中删除对象,这不是强制性的。

于 2013-07-21T09:04:58.647 回答