Knockout的textInput
绑定曾用于Oracle JET v3.2.0 ojInputText
标记。
<input id="text-input"
type="text"
data-bind="ojComponent: {component: 'ojInputText',
textInput: value}"/>
但是现在Oracle JET v5.2.0的每个组件都是一个自定义HTML组件,textInput
不再起作用了。我试过这些方法:
<oj-input-text id="text-input" textInput="{{value}}"></oj-input-text>
<oj-input-text id="text-input" data-bind="textInput: value"></oj-input-text>
有没有办法让textInput
与oj-input-text
合作?
我也检查过documentation,但没有提到任何内容。
这是不可能的,您可以在检查库时看到原因。在ojinputtext.js
中,_onKeyUpHandler
函数专门监听Enter键而不是其他任何东西。
_onKeyUpHandler : function (event)
{
if(event.keyCode === $.ui.keyCode.ENTER){
this._SetValue(this._GetDisplayValue(), event);
}
}
也无法从viewModel修改此函数,因为ojinputtext
最终在OJET中注册为复合组件,然后才能访问它。
oj.CustomElementBridge.registerMetadata('oj-input-text', 'inputBase', ojInputTextMeta);
oj.CustomElementBridge.register('oj-input-text',
{'metadata': oj.CustomElementBridge.getMetadata('oj-input-text')});
你可以做一个解决方法,围绕监听每次击键的输入文本包装一个Jquery函数。
正如@Srishti所证实的那样,我不能将textInput
与Oracle JET一起使用。所以我创建了一个Knockout Binding Handler来模仿这种行为,我相信其他人也会觉得有用:
<oj-input-text data-bind="textInputOJET: value"></oj-input-text>
JS:
ko.bindingHandlers.textInputOJET = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
$(element).focus(function(){
$($(this).find('input')[0]).keyup(function(event){
valueAccessor()(event.currentTarget.value);
});
});
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {}
}
self.value = ko.observable();
self.value.subscribe(function(newValue){
console.log(newValue);
});