骨干模型:嵌套数据结构

时间:2012-01-07 12:21:15

标签: javascript rest backbone.js

我正在开发骨干应用程序,这会产生跨域请求。请求中的嵌套数据结构是必需的,在curl请求中我有这样的结构:

{
    "site_id": 1,
    "post": {
        "site_id": 1,
        "provider_id": 1,
        "provider_post_id":1,
        "created_ts": "12.12.12",
        "post": {
            "header": "text",
            "caption": "text",
            "image": "http://...jpg"
        }
    }
}

在模型中我没有嵌套结构,这非常舒服,因为我在image中使用了view模型字段(DOM元素创建)。

从Backbone应用程序向服务器发送嵌套数据的正确方法是什么?

型号:

var WraperModel = Backbone.Model.extend({
    url: 'http://mydomain/core/api/v1/bookmarklet_post/?  callback=?',
    defaults: {
        site_id: 1, // shouldn't be hardcoded
        type:"type", site_id:2, provider_id: 2, provider_post_id: 2,  created_ts:2,
        header : '',
        caption: '',
        image: ''
    },
});

视图的一部分,它使用image模型属性:

drawItem: function (model) {
    var inst = new ImageView({model: model, tagName: 'li',     className:'images-item'}).render();
    this.imagesWrapper.append(inst.el);
},
getImages: function () {
   var images = doc.getElementsByTagName('img'),
       view = this;
   _.each(images, function (image) {
       image.offsetHeight > 75 
       && image.offsetWidth > 75 &&
       view.collection.add({image: image.src});
   });
},

另一个视图的一部分,它将数据发送到服务器。

sendTo: function(){
    var that = this,
    data = {saving: true};

    $('#add-header').val() && (data.header = $('#add-header').val());
    $('#add-description').val() && (data.caption = $('#add-description').val());
    this.model.set(data);
    this.model.save();
}

1 个答案:

答案 0 :(得分:1)

您在save中传递的第一个参数是要在保存中传递的属性的哈希值。

sendTo函数中,只需使用模型中的数据和服务器所需的任何其他表单值构建一个对象。默认情况下,当保存成功时,响应中的数据将通过解析方法传递并在模型上重新设置。

var myData = {
     //create nested object for the server
};

this.model.save(myData);