sap.m.Select:以空白选择输入元素开始

sap.m.Select: start with a blank selection input element

sap.m.Select 上使用数据聚合时,第一个条目总是 selected。这是 SDK's preview 的 link。

来自我的应用程序的示例代码

new sap.m.Select("id-names", {
    width: '100%',
}).bindAggregation("items", "data>/trip/names", new sap.ui.core.Item({
    text: "{data>Name}"
}));

构造函数中有一个名为 selectedKey 的参数,用于将其更改为另一个索引。我想要的是 select 为 空白 ,因为我想强迫我的用户做出选择,而不是温和地接受列表中的第一个条目。

我可以在我的聚合中强制输入一个空白条目 data>/trip/names 但这会污染我的列表。

有没有更好的方法来实现这个?

目前没有。似乎没有更好的办法。 GitHub.

上有票

您还可以扩展控件并构建您自己的 select,例如一个额外的参数添加空选择...我实际上也在考虑...

自OpenUI5 version 1.34起,可以将forceSelection 属性设置为false

forceSelection 属性 表示选择是否仅限于列表中的一项。默认值为 true(这意味着,如果未设置选择,则选择下拉列表中的第一项)。

什么时候设置为false?

如果您不想预选默认项。

附加信息 https://github.com/SAP/openui5/commit/b2191fd50e2115f8f9d2db7604a75fb50c57591f

尽管这个解决方案不是很好,但我通过添加 forceSelection=false 属性 以及控制器的 onInit 函数(我使用了 Select 元素):

    var codeField = this.getView().byId("codeField");
    setTimeout(function() {
        codeField.insertItem(new sap.ui.core.ListItem({text: '', key: undefined}), 0);
    }, 1000);

如果 forceSelection=false 被遗漏,该字段将过早或过晚加载到下拉列表中,这将导致错误的选择可见。希望对大家有帮助。

我也认为避免弄乱数据集并且非常喜欢添加额外项目聚合的想法。然而,我对此的改进是在控件本身上使用格式化程序,以便它清晰可见并在正确的时间执行。 我使用带有完全合格控制器的格式化程序来将控件作为 'this' 参数。在格式化程序函数中,我添加了一个 ListItem,正如@Victor S

所提议的

在XML视图中

<Select forceSelection="false" selectedKey="{model>/key}" items="{path: 'model>/Items'}" icon="{path: '', formatter: 'mynamespace.Utils.addDeselectOption'}">

在 Utils 控制器中:

addDeselectOption: function() {
    var that = this;
    this.getBinding("items").attachDataReceived(function(){
        that.insertItem(new sap.ui.core.ListItem({text: '', key: undefined}), 0);
    });
}

我在 UI5 1.52 中工作