在我的应用程序中,我有一个扩展Em.Select
视图:
App.SelectField = Em.Select.extend({
attributeBindings: ['disabled'],
actions: {
setFocus: function(){
this.$().focus();
}
}
});
在我的车把模板中使用:
{{view App.SelectField
viewName="cbAddressType"
disabledBinding='getIsDisabled'
contentBinding="controllers.addressTypes"
optionValuePath="content.id"
optionLabelPath="content.addressTypeName"
valueBinding="getSetAddressType"}}
视图disabledBinding
绑定到视图的控制器属性getIsDisabled
。当此属性更改时,选择视图将启用或禁用。这工作得很好。
但是,我对模板也有一个操作:
<button {{action "editRecord" view.cbAddressType}}>Edit</button>
这调用了控制器的editRecord
动作:
actions: {
editRecord: function (fieldToFocusOn) {
this.toggleProperty('isEditing');
if (fieldToFocusOn && this.get('isEditing'))
{
fieldToFocusOn.send("setFocus");
}
}
}
它将动作发送setFocus
到上面SelectField
,后者又focus()
在选择控件上运行该方法。
问题是在 Select 上的属性被控制器中绑定属性的更改值更新focus()
之前触发。disabledBinding
控件在启用之前无法接收焦点。我尝试了一个while select.disabled [wait] loop
,但这只是导致了一个无限循环,因为看起来视图在setFocus
被调用之后才被刷新——它们不是异步运行的。
我还注意到,在 aEmber.TextField
而readonlyBinding
不是 adisabledBinding
上,这种方法可以正常工作:在readonly
触发 focus() 事件之前删除文本字段的属性。
感谢任何建议。