gpt4 book ai didi

javascript - 检测主干模型更改以启用表单的保存按钮和更新模型

转载 作者:行者123 更新时间:2023-11-30 05:48:50 25 4
gpt4 key购买 nike

我的简单表单模板是这样的

<script type="text/template" id="template">
<form id="myForm " >
<fieldset>
<label>Name</label>
<input type="text" id="name" name="name" />
<label>Age</label>
<input type="text" id="age" name="age" />
<input type="hidden" id="id" name="id"/>
</fieldset>
<a id="save" disabled >Save Changes</a>

我的bakbone View 如下:

myView = Backbone.View.extend({
template: _.template( $("#template").html() ),
events: {
"click #save" : "save",
},
bindings: {
'#id': 'id',
'#name': 'name',
'#age': 'age'
},
initialize: function () {
if(this.model){
this.model.fetch();
}
this.listenTo(this.model, 'all', this.render);
},
render: function () {
this.$el.html( this.template );
this.stickit(); //used library http://nytimes.github.io/backbone.stickit/
},
save: function() {
//how to do following
//save model
//if success, reset form to new value
//if error, do not reset form and alert there is error in saving
}

我的 View 从这里初始化

RegionManager.show(new app.myView({
model : new app.myModel(
{id: 1})
}));

在这里,我的表单成功显示了带有姓名和年龄字段的表单。它们出现如下所示 form with save disabled .这里的表格被禁用。现在,当用户更改任何值时,它应该立即检测并启用保存按钮,并且应该如下所示 form save enabled .一旦用户将 y 附加到米奇,这里就会启用保存。现在,当用户点击保存时,如果成功则应该保存,否则它会提示错误。如果成功,它应该显示更新后的表格。

我是 backbone 的新手,正在尝试找出以上两种解决方案。

最佳答案

只要对表单进行了任何更改,stickit 就会更新模型,这将触发更改事件。您可以在 initialize 中设置监听器以启用保存:

this.listenTo(this.model, 'change', function() { this.$('#save').prop('disabled', false); });

在保存时,您可以使用任何 jQuery ajax 回调和属性,因此您需要执行如下操作:

save: function() {
if (!this.$('#save').prop('disabled')) {
this.model.save({
success: function() {
// You don't really need to do anything here. If the model was changed in the
// save process, then stickit will sync those changes to the form automatically.
},
error: function(model, xhr, options) {
alert('Formatted error message. You can use the xhr.responseText, but that may not be user friendly');
}
});
}
}

此外,请查看我在原始帖子下的评论。

关于javascript - 检测主干模型更改以启用表单的保存按钮和更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16099102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com