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.jsmodel.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();