首页 > 解决方案 > customData如何与JavaScript绑定

问题描述

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

我已经尝试过以下路径:

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;
}

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

标签: sapui5

解决方案


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

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

您只能绑定模型。

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

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

1. 和 2 的缺点:您需要一个用于在其他模型或对象中进行相应查找的键。

据我了解,我会用解决方案 3 解决它。


推荐阅读