从模型更新数据时,“更改”不起作用

时间:2019-07-31 01:52:59

标签: javascript java sapui5

我对sapui5有问题,我有一个输入框,如您在下面的代码中所见。

输入框内的数据是使用模型设置的,但是lostFocusItem函数仅在我直接将值键入输入框时才起作用,而在使用模型设置值时不起作用。

...

<t:Column autoResizable="true" width="300px">
<Label text="{i18n>ItemCode}" required="true"/>
<t:template>
    <Input id="Inp_ItemCd" value="{model1>itemCd}" showValueHelp="true" valueHelpRequest="otherFunction" change="lostFocusItem"/>
</t:template>
</t:Column>

...
...

lostFocusItem: function(oEvent){
    console.log("inside function lostFocusItem");
},

...

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试liveChange是因为库中不存在事件更改,但是事件liveChange。也许不推荐使用?

答案 1 :(得分:0)

@Marc提到change事件是Input的一部分,而不是模型的一部分。因此,仅当您更改实际输入而不是绑定值时才触发它。确实如此,但是有一种解决方法。

您可以使用输入fireLiveChange事件和格式化程序来实现它。

View.xml

<Input value="{path: 'ipModel>/text', formatter: 'assets.util.Formatter.triggerLiveChange'}" 
       liveChange="ipLiveChange" />

Controller.js

onInit: function() {
    this.setInputModel();
},
setInputModel:function() {
    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData({ text: "Test Value"});
    this.getView().setModel(oModel, "ipModel");
},
ipLiveChange: function(oEvent) {
    console.log("LiveChange triggered!!");
}

Formatter.js

jQuery.sap.declare("assets.util.Formatter");
assets.util.Formatter = {
    triggerLiveChange: function (value) {
        this.fireLiveChange();
        return (value);
    }
};