如何使用OJET输入文本v5.2.0实现textInput绑定?

问题描述 投票:0回答:2

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>

有没有办法让textInputoj-input-text合作?

我也检查过documentation,但没有提到任何内容。

knockout.js custom-component oracle-jet
2个回答
1
投票

这是不可能的,您可以在检查库时看到原因。在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函数。


0
投票

正如@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);
});
© www.soinside.com 2019 - 2024. All rights reserved.