我在初始化函数后插入了自动完成功能,如stickit文档中所建议的那样。
几乎是你好世界的例子:
MyApp.Views.Form = Backbone.View.extend({ el: "#my-form", bindings: { "#postcode_with_suburbs": { observe: "postcode", initialize: function($el, model, options) { $el.autocomplete({ source: [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ] }) }, onSet: function(val, options) { return $("#postcode_with_suburbs").val(); } }, }, events: { "click #form-submit" : "submit", }, initialize : function() { this.listenTo(this.model, "change"); this.render(); }, render: function() { this.$el.html(JST['backbone/templates/car_insurance/form']); this.stickit(); return this; } });
所以问题是当用户填写表单并通过单击自动完成值自动填充邮政编码时,它不会保存到模型属性中。 Saved as ja
代替java
然而,使用键盘在自动填充的选项上向下滚动,值会正确设置为模型的属性。 Saved as java
答案 0 :(得分:0)
stickit绑定确实绑定了change input keyup
类型的绑定DOM元素上的<input>
事件的事件侦听器。使用侦听器更新模型属性。在您的情况下,元素postcode_with_suburbs
是输入类型,当用户从下拉列表中选择其中一个选项时,应触发change
事件。我不知道为什么不解雇这个事件。试试这个小提琴here查看更改
select: function(event, ui) {
$(this).trigger("change", event);
}
在自动完成的select
事件回调中,我在元素上显式触发更改事件。您还可以配置events: [autocompleteselect]
而不是select
回调。