在sap.m.Select
上使用数据聚合时,始终选择第一个条目。这是SDK's preview的链接。
我的应用程序的示例代码
new sap.m.Select("id-names", {
width: '100%',
}).bindAggregation("items", "data>/trip/names", new sap.ui.core.Item({
text: "{data>Name}"
}));
在构造函数上有一个名为selectedKey
的参数,用于将其更改为另一个索引。我想要的是选择为空白,因为我想强迫我的用户做出选择,而不是温和地接受列表中的第一个条目。
我可以强制我的聚合data>/trip/names
中的空白条目,但这会污染我的列表。
有没有更好的方法来实现这一目标?
目前,没有。似乎没有更好的方法。在GitHub上有一张票。
自OpenUI5版本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'参数。在formatter函数中,我添加了一个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中形成了我的作品