我正在使用Backbone.js开发MVC应用程序。
假设我有一个用户详细信息: -
var userDetailsView = Backbone.View.extend({
model: userModel,
el: "#userDteails",
template: Handlebars.templtas.userDetails
initialize: function () {
this.model = new userModel();
this.model.fetch({
success: function (data) {
this.render();
}
});
},
render: function () {
$(this.el).html(this.template());
},
events: {
"", "saveUserDetails" //event for save
},
saveUserDetails: function () {
//How do I get the update value of FirstName??
}
});
现在,在类似的行中,我有一个处理用户模型编辑细节的车把模板。
<div id="userDetails">
<input type="text" value="{{FirstName}}" id="firstName"/>
</div>
请忽略代码错误,因为它只是一个虚拟代码,现在如果我需要保存用户详细信息(例如,例如FirstName)。然后我如何获得更新的值?
应该是: -
saveUserDetails: function () {
//How do I get the update value of FirstName??
this.model.set("", $('#Firstname').val());
}
或者我应该关注converting form data to JSON,并更新我的this.model
,即使用name
属性创建我的HTML标记: -
<form>
First Name:<input type="text" name="Fname" maxlength="12" size="12"/> <br/>
</form>
并使用Tobias Cohen
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
并做: -
$('form').submit(function() {
$('#result').text(JSON.stringify($('form').serializeObject()));
return false;
});
我不是Backbone的专家,但已经看过至少10-15个教授骨干的样本和教程。其中我找到了上述两种方法。
请让我知道,最好的方法是什么。
答案 0 :(得分:0)
两种方式都可以!这取决于您的HTML&lt; - &gt;的复杂程度模型映射是。如果所有事情都可以使用带有名称/数据名称的div / span / input或者任何漂浮在你船上的东西来完成,那么序列化路线很简单。但是一旦你长大了,你可能会看到更多的自定义方式,这在技术上类似于你的第一个选项,只是从输入字段获得.val()的更多逻辑。
我不太了解你的两个示例处理,但你说不要担心细节...所以:)对于表单一,我假设.text()仅用于调试目的?正确的代码可能首先阻止表单提交上的Default()然后执行一个model.save($('form')。serializeObject())来更新模型并同时将其保存在服务器上。有一些成功/错误回调,以便进行测量!