【问题标题】:SAPUI5 - Input error on growing list, logic issueSAPUI5 - 增长列表输入错误,逻辑问题
【发布时间】:2017-05-26 21:29:45
【问题描述】:

我对不断增长的列表有疑问。以前我有一个普通列表,但由于它仅限于显示 100 个项目,我现在需要将其更改为一个不断增长的列表,现在它工作正常,当我放 增长时,我可以加载超过 100 个项目="true"growthThreshold="50"growthScrollToLoad="false" 属性就行了。

但是现在我在自定义列表中的一个数字输入中遇到了问题,当输入一个数字时它没有保持设置(它有一个更新文本组件的 liveChange 事件)。

我在控制器中设置了一个断点进行测试,当我尝试设置数据更改时,它似乎出错了(附图上的红色箭头)。

任何人都可以看到逻辑问题吗?如果需要任何额外的代码 sn-ps,我可以提供。

onReceivedQuantityChange: function (oEvent) {
            // get model and data
            var oModel = this.getOrderModel();
            var oData = oModel.getData();

            // get item from path
            var oItem = this._getOrderItemByPath(oEvent.getSource().getBindingContext(this.MODEL_ORDERS).getPath());

            // set received value
            oItem._ReceivedValue = oEvent.getParameters().newValue * (oItem.ValuationPrice / oItem.Quantity);

            // apply data changes
            oModel.setData(oData);
        },

Controller code image

【问题讨论】:

  • var iReceivedValue = iNewValue * (iValuationPrice / iQuantity) oModel.setProperty(sItemPath + '/_ReceivedValue', iReceivedValue)
  • 谢谢,它允许它工作。我的 JS 并不出色,你能解释一下它在做什么吗?我现在也收到 iNewValue 未定义控制台错误。

标签: list data-binding sapui5


【解决方案1】:
onReceivedQuantityChange: function (oEvent) {    
   var oModel = this.getOrderModel()
   var sItemPath = oEvent.getSource().getBindingContext(this.MODEL_ORDERS).getPath()
   var iValuationPrice = oModel.getProperty(sItemPath + '/ValuationPrice')
   var iQuantity = oModel.getProperty(sItemPath + '/Quantity')

   var iNewValue = oEvent.getParameters().newValue
   var iReceivedValue = iNewValue * (iValuationPrice / iQuantity) 
   oModel.setProperty(sItemPath + '/_ReceivedValue', iReceivedValue)
}
  1. 如果您在模型上使用 setProperty(),您只会更改 DataModel 中的特定属性,而 Sapui5 只能在此属性(而不是整个模型)上进行绑定更改。

    李>
  2. 如果您通过getData() 将数据从模型中取出,您只会获得对该对象的引用。如果您更改此 Object 上的某些内容,则不必通过 setData() 将其设置回来(它已经存在,因为您使用了此 Object 的引用)。

但是 Sapui5 需要知道数据模型有一个特定的变化,这是通过使用 setProperty() 完成的

【讨论】:

  • ^^ 以上没有用。我玩了一下,最终得到的结果是在设置数据之前设置属性。 oModel.setProperty(oItem._ReceivedValue);感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2015-07-11
  • 1970-01-01
  • 2011-09-28
相关资源
最近更新 更多