在骨干中保存复杂的模型

时间:2013-07-06 15:34:38

标签: backbone.js model save

我有一个模型数据,如:

{
    "status": 7, 
    "organizations": [{
        "org_address": "\u4e2d\u56fd\u5317\u4eac\u5e02\u671d\u9633\u95e8\u59161001\u53f7",
        "job_positions": "\u603b\u7ecf\u7406", 
        "org_id": 11, 
        "org_name": "\u6570\u7ef4\u79d1\u6280"
    }], 
    "first_name": null, 
    "last_name": null, 
    "create_date": "2013-07-02 23:47:14.239000", 
    "name": "\u5f20\u5174\u6807", 
    "extra_emails": [null], 
    "tags": [{
        "oid": 4, 
        "id": 4, 
        "name": "friend"
    }], 
    "nick_name": "\u9ec4\u98de\u9e3f", 
    "gender": "\u7537", 
    "image": null, 
    "created_by": "system", 
    "effective_start_date": "2013-07-02 23:47:14.239000", 
    "social_medias": [{
        "url": "http://weibo.com/12345",
        "sm_name": "\u6700\u70ab\u6c11\u65cf\u98ce", 
        "type": "\u65b0\u6d6a\u5fae\u535a", 
        "party_sm_id": 1
    }], 
    "date_of_birth": "1980-04-01", 
    "extra_phones": {
        "office_phone": "82323333", 
        "fax": "82324433"
    }, 
    "mobile_phone": "13909609306", 
    "primary_email": "zhangxb@xy.com", 
    "id": "10", 
    "isUser": false
}

现在我想修改数据并保存模型,假设我的模型名为“cmodel”。当我尝试保存数据时,我尝试了以下内容:

cmodel.save({
    organizations[0].org_address:"road1",
    organizations[0].org_name:"name1"
});

但是这不起作用,所以我想知道如何保存我编辑的数据。

希望得到你的帮助,谢谢你。

1 个答案:

答案 0 :(得分:2)

我很想知道mu是否太短了答案/评论会起作用,因为这本来就是天赐之物!我已经离开并改变了我自己的代码:)

但是,如果您按照他的建议尝试保存模型,很遗憾会将新属性合并到名为“organizations [0] .org_address”的模型中。您可以在this fiddle中看到这一点。

所以......如果您的模型属性是一个数组,并且您想编辑和保存数组的各个元素,那么这样做的方法是克隆整个数组,更改您想要的元素,然后将克隆的数组传递给像这样的保存函数

var orgClone = _.clone(cmodel.get("organizations"));

orgClone[0].org_address = "road1";
orgClone[0].org_name = "name1";

cmodel.save({organizations: orgClone });

重要的是要注意下划线克隆功能只是浅拷贝。如果您的模型属性是具有嵌套数组/对象的复杂对象,那么滚动您自己的克隆函数或使用jQuery扩展来获得深度克隆是明智的,如下所示:

var orgClone = $.extend([], cmodel.get("organizations"));