javascript - 在UI5表格的不同行中添加不同的控件

标签 javascript data-binding sapui5

我有表sap.ui.table.Table并且我有一个模型,其中一些记录有链接,有些没有。我想在列中的 sap.m.Link 组件中呈现链接,当该链接在记录中不可用时,它应该呈现“未提供链接”。在列中的 sap.m.Text 中。

由于sap.ui.table.Column具有不支持绑定(bind)聚合的模板聚合,因为它仅支持0或1个控件。格式化程序也适用于此。有什么方法可以根据模块数据在运行时更改列的内容吗?

我的模块数据是:

var data = [{
   id : 1,
   link : 'abc.com'
},
{
   id : 2
},
{
   id : 3,
   link : 'pqr.com'
}]

我提供代码:

var link = new sap.m.Link({text : "{link}"});
var noLink = new sap.m.Text({text : "Link is not provided."});

var idColumn = new sap.ui.table.Column({
    label : [new sap.m.Label({text : "ID"})],
    template : [new sap.m.Text({text : "{id}"})]
});

var linkColumn = new sap.ui.table.Column({
   label : [new sap.m.Label({text : "Link"})],
   template : [??????]
});

var table = new sap.ui.table.Table({
    columns : [idColumn, linkColumn]
});

var model = new sap.ui.model.json.JSONModel();
model.setData({items : data});
table.setModel(model);
table.bindRows("/items");

我想根据模块中的数据在列likColumn运行时添加linknoLink。我怎样才能实现这个目标?

最佳答案

可以使用formatter更改每列的显示内容

例如:

   new sap.m.Link({
      width: "20em",
      //editable: false,
      //text: "{items>link}"   
      text: {
        path: "items>link",
        formatter: function(link){
          if (link === undefined) return "Link is not provided"
          return link;
        }
      }
    });

...

oTable.addEventDelegate({
    onAfterRendering: function(){
        $('#idTable a:contains("Link is not provided")').removeClass("sapMLnk");
    }
}, oTable);

更新:这是一个 jsbin,其中包含您需要的完整示例: UPDATED example

关于javascript - 在UI5表格的不同行中添加不同的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019792/

相关文章:

javascript - 更新模型并不总是导致更新 View

node.js - 引用存储在 Linux/Unix 中的 UI5 控件失败,而在 Windows 上同样有效

c# - ComboBox 或 ListBox 作为 Form 的索引 - 将其他控件绑定(bind)到 SelectedItem

c# - 在 PropertyChange 的 ItemsControl 中为派生的 ObservableCollection<T> 重新排序呈现的项目

javascript - 使用 Bootstrap 按钮组复选框绑定(bind)选中的正确方法是什么?

javascript - AmCharts 传奇

c# - 将类对象绑定(bind)到 wpf 中的 ListView

sapui5 - 折叠/展开 sap.ui.commons.Panel 的事件?

javascript - 如何将 jQuery .find() 函数的结果转换为数组?

javascript - 在窗口底部创建一个固定的可折叠 Accordion