我做错了吗?
我的模板
<select id="muni" class="form-control" value="{{formData.muni_ssn}}" on-select="muni_selected">
{{#formData.municipalities}}
<option value="{{ssn}}">{{name}}</option>
{{/formData.municipalities}}
</select>
我的js代码
var caseForm = new Ractive({
el: "case-form",
template: "#CaseFormTemplate",
data: {
formData: mappeal.caseFormData
}
});
caseForm.on("muni_selected", function (event) {
alert(event.context.formData.muni_ssn);
});
答案 0 :(得分:11)
没有select
事件这样的事情。在标准JavaScript中,如果没有Ractive,您可以执行此操作来收听<select>
元素值的更改:
// 'change' event, not 'select' event
document.getElementById( 'muni' ).addEventListener( 'change', function () {
console.log( 'select value changed to', this.value );
});
因此Ractive中的等价物将是
<select id="muni" class="form-control" value="{{formData.muni_ssn}}" on-change="muni_selected">
{{#formData.municipalities}}
<option value="{{ssn}}">{{name}}</option>
{{/formData.municipalities}}
</select>
但实际上,使用Ractive监听这些更改的方法实际上更为简单 - 观察数据本身。首先,我们可以摆脱事件处理程序指令:
<select id="muni" class="form-control" value="{{formData.muni_ssn}}">
{{#formData.municipalities}}
<option value="{{ssn}}">{{name}}</option>
{{/formData.municipalities}}
</select>
然后,在您的代码中,执行以下操作:
caseForm.observe( 'formData.muni_ssn', function ( newValue, oldValue ) {
console.log( 'changed from', oldValue, 'to', newValue );
});
这样做的好处是,您不需要区分由于DOM交互而发生的更改,以及以编程方式发生的更改(例如,作为初始设置的一部分) - 使其更容易跟踪申请状态。