我正在使用主干、下划线和主干.stickit 库创建类似这样的形式。我的屏幕大部分看起来有点像这样。
表单html
<form id="main">
<div>
<label for="words">words: <input name="words" type="text"/></label>
</div>
<div>
<label for="type">type: <input name="type" type="text"/></label>
</div>
<div>
<input id="okButton" class="btn" value="save"/>
</div>
主干模型/视图
var app = {
Model: Backbone.Model.extend({}),
View: Backbone.View.extend({
initialize: function() {
this.setElement($('#main'));
},
bindings: {
'input[name=words]': 'words',
'input[name=type]': 'type',
'input#okButton': {
attributes: [{
name: 'disabled',
observe:['type','words'],
onGet: 'okButtonDisabled'
}],
}
},
okButtonDisabled: function(words) {
return words[0].length > 0 ? null : true;
},
addDisabledClass: function(words) {
return words[0].length > 0 ? "" : "disabled";
},
render: function() {
this.stickit();
}
})
};
当用户在类型字段中输入一些值时,“保存”按钮被启用,否则它被禁用。
上面的例子只绑定类型字段。它不适用于“单词”字段。
我正在做的事情
我正在处理的表单的 jsfiddle 在这里。
表单html
<form id="main">
<div>
<label for="words">words: <input name="words" type="text"/></label>
</div>
<div>
<label for="type">type: <input name="type" type="text"/></label>
</div>
</form>
模型/视图代码
var app = {
Model: Backbone.Model.extend({}),
View: Backbone.View.extend({
initialize: function() {
this.setElement($('#main'));
},
bindings: {
'input[name=words]': 'words',
'input[name=type]': 'type',
'input#okButton': {
attributes: [{
name: 'disabled',
observe:['type','words'],
onGet: 'okButtonDisabled'
}],
}
},
okButtonDisabled: function(words) {
return words[0].length > 0 ? null : true;
},
addDisabledClass: function(words) {
return words[0].length > 0 ? "" : "disabled";
},
render: function() {
this.stickit();
}
})
};
var model = new app.Model({
words: "apple",
type: "fruit"
});
var view = new app.View({
model: model
});
view.render();
我想做的是:
- 最初将“保存”按钮设置为禁用。
- 如果用户对任何表单字段进行任何更改,则必须启用“保存”按钮。
- 但是,如果用户在任何字段中输入内容以启用“保存”按钮,并再次使该字段与原始字段相同,则必须再次禁用“保存”按钮。即将“apple”编辑为“apppleee”,以便启用“保存”,然后将“appleee”反转回“apple”以再次禁用“保存”按钮。
提前感谢您的帮助。