如何将customData与JavaScript绑定

时间:2019-04-22 15:05:08

标签: sapui5

在受影响的应用程序中是一个响应表,其响应表ColumnListItems通过JavaScript代码添加。现在,应根据状态使用突出显示机制突出显示行。第一个想法是通过常规的控制器功能来控制整个事情。我很快就放弃了这个想法,因为格式化程序是针对此类情况的。因此,我创建了适当的Formatter函数,并在JavaScript代码中对其进行了引用。调用似乎没有错误,因为在每种情况下都会触发“ console.log”。固定值的传输也可能没有问题。但是,我必须传输的值位于每行的customData中... 无论我如何尝试形成路径,都会得到“未定义”或“空”输出。

我已经尝试了以下路径:

  • “ /已编辑”
  • “ / customData / edited”
  • “ mAggregations / customData / 0 / mProperties / value”
  • “ / mAggregations /项目/ 0 / mAggregations / customData / 0 / mProperties / value”

Controller.js中的代码(具有不同的路径指示):

var colListItem = new sap.m.ColumnListItem({
   highlight: {
        parts: [{
            path: "/mAggregations/items/0/mAggregations/customData/0/mProperties/value"
            }, {
            path: "/edited"
            }],
        formatter: Formatter.setIndication
    },
    cells: [oItems]
});
// first parameter to pass while runtime to the formatter
colListItem.data("editable", false);
// second paramter for the formatter function
colListItem.data("edited", false);
oTable.addItem(colListItem);

Formatter.js中的代码:

setIndication: function (bEditable, bEdited) {
    var sReturn;
    if (bEditable && bEdited) {
        // list item is in edit mode and edited
        sReturn = "Error";
    } else if (bEditable || bEdited) {
        // list item is in edit mode or edited
        sReturn = "Success";
    } else {
        sReturn = "None";
    }
    return sReturn;
}

目标也是格式化程序自动使用模型的值,以避免其自己实现侦听器等。 我希望你们中的一个有一个好主意,可能会给我带来一个解决方案:) 提前非常感谢!

1 个答案:

答案 0 :(得分:1)

您无法绑定到customData。因为customData位于元素中,所以它就像一个属性。

这就是为什么您在colListItem上定义它的原因:colListItem.data("key", value)

您只能绑定模型。

所以我看到了三种解决方案

  1. 将信息存储在一个单独的本地JSON模型中,您可以专门通过其绑定路径将值提供给格式化程序
  2. 不要通过到格式化程序的绑定路径提供信息,而是通过格式化程序功能中的this(= controller)从保存信息的控制器中的全局变量读取模型/对象/数组
  3. 将信息存储在每个元素的customData中,并通过this(= ColumnListItem).data()访问格式化程序函数中的元素引用。 将上下文传递给与此formatter: [Formatter.setIndication, colListItem]
  4. 类似的格式化程序

1和2的缺点:在其他模型或对象中,您需要分别进行查找的键。

据我了解,我可以使用解决方案3来解决。