I15*_*159 6 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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
在模型中我没有嵌套结构,这很舒服,因为我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: ''
},
});
Run Code Online (Sandbox Code Playgroud)
视图的一部分,它使用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});
});
},
Run Code Online (Sandbox Code Playgroud)
另一个视图的一部分,它将数据发送到服务器.
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();
}
Run Code Online (Sandbox Code Playgroud)
您传入的第一个参数save是要在保存中传递的属性的哈希值。
在您的sendTo函数中,只需以服务器期望的方式使用模型中的数据和任何其他表单值构建一个对象。默认情况下,当保存成功时,响应中的数据将通过解析方法传递并设置回模型。
var myData = {
//create nested object for the server
};
this.model.save(myData);
Run Code Online (Sandbox Code Playgroud)