Jquery 在将主干模型发送到DB之前,是否有更好的方法更新主干模型?

Jquery 在将主干模型发送到DB之前,是否有更好的方法更新主干模型?,jquery,backbone.js,Jquery,Backbone.js,在将模型发送到数据库之前,是否有更好的方法使用表单中的值更新模型?我想这样做: mySave: function () { this.model.save($(this.el).find(':input').serializeArray()); }, 问题是.serializeArray()返回一个数组[{key1:val1},{key2:val2}],backbone.jsmodel.save()需要一个对象{key1:“val1”,“key2:“val2”}

在将模型发送到数据库之前,是否有更好的方法使用表单中的值更新模型?我想这样做:

    mySave: function () {
        this.model.save($(this.el).find(':input').serializeArray());
    },
问题是
.serializeArray()
返回一个数组
[{key1:val1},{key2:val2}]
,backbone.js
model.save()
需要一个对象
{key1:“val1”,“key2:“val2”}
作为参数

后端是asp.net MVC。我提到这一点只是为了防止有更好的方法将这些信息传递回服务器


目前,我正在迭代序列化数组,并逐个设置主干模型上的每个属性。

如果源是对象数组,则可以使用(现在在大多数现代浏览器中使用):

从json2.js:


如果您的源是对象数组,则可以使用(现在在大多数现代浏览器中都有):

从json2.js:


我刚刚写了这样一句话:

在这里查看它的工作演示

(函数($){
$.fn.toJSON=函数(选项){
options=$.extend({},options);
var self=这个,
json={},
push_计数器={},
模式={
“验证”:/^[a-zA-Z][a-zA-Z0-9\]*(?:\[(?:\d*.[a-zA-Z0-9\]+)\])*$/,
“键”:/[a-zA-Z0-9\]+|(?=\[\])/g,
“推送”:/^$/,
“固定”:/^\d+$/,
“已命名”:/^[a-zA-Z0-9]+$/
};
this.build=函数(基、键、值){
基[键]=值;
返回基地;
};
this.push_计数器=功能(键,i){
if(按下计数器[键]==未定义){
按键计数器[键]=0;
}
如果(i==未定义){
返回推送计数器[键]+;
}
如果(i!==未定义&&i>push_计数器[键]){
返回push_计数器[键]=++i;
}
};
$.each($(this).serializeArray(),function(){
//跳过无效密钥
如果(!patterns.validate.test(this.name)){
返回;
}
var k,
keys=this.name.match(patterns.key),
merge=this.value,
反向_key=this.name;
while((k=keys.pop())!==未定义){
//调整倒车键
reverse\u key=reverse\u key.replace(新的RegExp(“\\[”+k+“\\]$”);
//推
if(k.匹配(模式.推送)){
merge=self.build([],self.push\u计数器(反向键),merge);
}
//固定的
else if(k.match(patterns.fixed)){
自推计数器(反转键,k);
merge=self.build([],k,merge);
}
//命名
else if(k.match(patterns.named)){
merge=self.build({},k,merge);
}
}
json=$.extend(true、json、merge);
});
返回json;
};
})(jQuery);

I刚刚写了以下内容:

在这里查看它的工作演示

(函数($){
$.fn.toJSON=函数(选项){
options=$.extend({},options);
var self=这个,
json={},
push_计数器={},
模式={
“验证”:/^[a-zA-Z][a-zA-Z0-9\]*(?:\[(?:\d*.[a-zA-Z0-9\]+)\])*$/,
“键”:/[a-zA-Z0-9\]+|(?=\[\])/g,
“推送”:/^$/,
“固定”:/^\d+$/,
“已命名”:/^[a-zA-Z0-9]+$/
};
this.build=函数(基、键、值){
基[键]=值;
返回基地;
};
this.push_计数器=功能(键,i){
if(按下计数器[键]==未定义){
按键计数器[键]=0;
}
如果(i==未定义){
返回推送计数器[键]+;
}
如果(i!==未定义&&i>push_计数器[键]){
返回push_计数器[键]=++i;
}
};
$.each($(this).serializeArray(),function(){
//跳过无效密钥
如果(!patterns.validate.test(this.name)){
返回;
}
var k,
keys=this.name.match(patterns.key),
merge=this.value,
反向_key=this.name;
while((k=keys.pop())!==未定义){
//调整倒车键
reverse\u key=reverse\u key.replace(新的RegExp(“\\[”+k+“\\]$”);
//推
if(k.匹配(模式.推送)){
merge=self.build([],self.push\u计数器(反向键),merge);
}
//固定的
else if(k.match(patterns.fixed)){
自推计数器(反转键,k);
merge=self.build([],k,merge);
}
//命名
else if(k.match(patterns.named)){
merge=self.build({},k,merge);
}
}
json=$.extend(true、json、merge);
});
返回json;
};
})(jQuery);

这不是默认的javascript,但德里克·贝利确实为主干网创建了一个modelbinding插件, 使您的模型/视图保持同步 如果更新了文本字段,它将更新模型属性 如果更改了模型特性,它将更新视图

更多信息请点击此处:

现在您不需要在保存中传递任何内容,您的模型是最新的,只需调用

model.save();

这不是默认的javascript,但Derick Bailey确实为主干创建了一个modelbinding插件, 使您的模型/视图保持同步 如果更新了文本字段,它将更新模型属性 如果更改了模型特性,它将更新视图

text = JSON.stringify(['e', {pluribus: 'unum'}]); // text = '["e",{"pluribus":"unum"}]'

model.save();