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 中工作
在 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 中工作