使用 Backbone + Stickit 提交表单时模型未更新
Model not updating on form submit, using Backbone + Stickit
我正在尝试使用 backbone.stickit 库将我的表单输入绑定到模型,但似乎无法使模型正确更新。
keyup 事件似乎正常工作,如果我使用 "onSet" 回调来显示它,我可以看到值的变化:
bindings: {
'#firstName': {
observe: 'firstName',
onSet: function(val, options) {
$('#output').html(val);
}
}
}
这是我的代码 (Run it on jsfiddle):
HTML
<div id="view">
<form name="form" id="form">
<input id="firstName" type="text"/>
<input type="submit" id="submit"/>
</form>
<div id="output"></div>
</div>
JavaScript
var app = {
Model: Backbone.Model.extend({
firstName: 'test'
}),
View: Backbone.View.extend({
el: "#view",
initialize: function(){
this.model = new app.Model();
this.render();
},
bindings: {
'#firstName': 'firstName'
},
render: function(){
this.$el.html( this.template );
this.stickit();
},
events: {
"submit #form": "submitForm"
},
submitForm: function(e) {
e.preventDefault();
$('#output').html('output:'+this.model.firstName);
}
})
};
var view = new app.View();
获取模型属性的方法通常不是通过访问作为对象的属性名称属性,而是您使用的方法this.model.firstName
。我个人知道这种实现的案例很少。所谓的正确方法是使用 get
方法:
this.model.get("firstName")
。
这将 return 当前模型值。
我通常为我使用的每个模型定义 getter 和 setter,所以我会执行以下操作:
getFirstName: function(){
return this.get("firstName");
}
只是看起来更好更多 "easy on the eyes" :)(但完全不是必须的)
这是您的 fiddle 的更新:http://jsfiddle.net/srhfvs8h/1/
我正在尝试使用 backbone.stickit 库将我的表单输入绑定到模型,但似乎无法使模型正确更新。
keyup 事件似乎正常工作,如果我使用 "onSet" 回调来显示它,我可以看到值的变化:
bindings: {
'#firstName': {
observe: 'firstName',
onSet: function(val, options) {
$('#output').html(val);
}
}
}
这是我的代码 (Run it on jsfiddle):
HTML
<div id="view">
<form name="form" id="form">
<input id="firstName" type="text"/>
<input type="submit" id="submit"/>
</form>
<div id="output"></div>
</div>
JavaScript
var app = {
Model: Backbone.Model.extend({
firstName: 'test'
}),
View: Backbone.View.extend({
el: "#view",
initialize: function(){
this.model = new app.Model();
this.render();
},
bindings: {
'#firstName': 'firstName'
},
render: function(){
this.$el.html( this.template );
this.stickit();
},
events: {
"submit #form": "submitForm"
},
submitForm: function(e) {
e.preventDefault();
$('#output').html('output:'+this.model.firstName);
}
})
};
var view = new app.View();
获取模型属性的方法通常不是通过访问作为对象的属性名称属性,而是您使用的方法this.model.firstName
。我个人知道这种实现的案例很少。所谓的正确方法是使用 get
方法:
this.model.get("firstName")
。
这将 return 当前模型值。
我通常为我使用的每个模型定义 getter 和 setter,所以我会执行以下操作:
getFirstName: function(){
return this.get("firstName");
}
只是看起来更好更多 "easy on the eyes" :)(但完全不是必须的)
这是您的 fiddle 的更新:http://jsfiddle.net/srhfvs8h/1/