Sapui5 向控件添加“All”值的最佳方法是什么?
//更新:我在中使用此控件 在UI5的控制下,如果我选择了一个项目,我将无法返回到未选择的状态,因此我希望在项目中添加“所有”值: 这项工作:Sapui5 向控件添加“All”值的最佳方法是什么?,sapui5,Sapui5,//更新:我在中使用此控件 在UI5的控制下,如果我选择了一个项目,我将无法返回到未选择的状态,因此我希望在项目中添加“所有”值: 这项工作: <Select> <core:Item key="" text="All" /> <core:Item key="another value" text="another value"/> </Select> 但在本例中,所有这些都是错误的: <Select items="{
<Select>
<core:Item key="" text="All" />
<core:Item key="another value" text="another value"/>
</Select>
但在本例中,所有这些都是错误的:
<Select
items="{
path: '/PRODUCTS'
}">
<core:Item key="" text="All" />
<core:Item key="{ID}" text="{Route_Name}" />
</Select>
我该怎么办 必须向text=All的项添加一些键值。请在jsbin中查看工作
在下面设置模型的位置添加
var oView = this.getView();
fnSuccess(oData,oResponse){
var value = {
ID : "All",
Route_Name : "All",
};
oData.results.splice(0,0,value); // oData your array of data
var oSelectData = {
PRODUCTS : oData
};
var oSelectJSON = new sap.ui.model.json.JSONModel();
oSelectJSON.setData(oSelectData);
oView.byId("id_select").setModel(oSelectJSON);
}
如果您想让用户再次选择无项,我建议在基本选择控件上使用sap.m.ActionSelect或sap.m.ComboBox
对于ActionSelect:使用forceSelection:false关闭强制选择,并添加一个操作按钮,该按钮带有执行myActionSelect.close.setSelectedKey;的press事件处理程序;。下面是一个示例:FacetFilter控件将适合您的要求。它有一个“全部”选项来选择列表中的所有值
<Select
items="{
path: '/PRODUCTS'
}">
<core:Item key="" text="All" />
<core:Item key="{ID}" text="{Route_Name}" />
</Select>
<FacetFilter
id="idFacetFilter"
type="Simple"
confirm="handleConfirm">
<lists>
<FacetFilterList
title="Route"
key="route"
mode="MultiSelect"
items="{
path: '/PRODUCTS'
}" >
<items>
<FacetFilterItem
text="{Route_Name}"
key="{ID}" />
</items>
</FacetFilterList>
</lists>
</FacetFilter>
为此,我创建了两个数组,一个包含“All”键/值对,另一个包含我的项列表,然后将它们合并在一起。在JSON视图模型中,声明数组: 选择[] 在onBeforeRendering生命周期方法中,检查数组是否填充为<0,如果填充为<0,请读取包含列表的实体集:
onBeforeRendering: function() {
// Build the provinces list
if (this.getModel("view").getProperty("/selections").length === 0) {
this.getModel().read("/SelectionList", {
success: this._setSelections.bind(this)
});
}
成功后,构建阵列并设置属性:
_setSelections: function(oResponse) {
var aSelections = [{
key: "",
text: "(All)"
}];
if (typeof oResponse.results !== "undefined") {
aSelections = aSelections.concat(oResponse.results);
}
this.getModel("view").setProperty("/selections", aSelections);
},
与@vivek'答案类似,在加载数据时附加一个All:
onHazardTabBarSelect : function(oEvent) {
var oTabBar = oEvent.getSource(),
sSelectedTabId = oTabBar.getSelectedKey(),
oSelectedTab = sap.ui.getCore().byId(sSelectedTabId),
sAssignmentPath = oSelectedTab.getBindingContext().getPath();
this._oModel.read( sAssignmentPath + "/assignedControls", {
urlParameters: {
"$expand": "control"
},
success: this.addControlSelectData.bind(this),
error: this.errorCallback.bind(this)
});
},
addControlSelectData : function(oEvent) {
var oSelectControl = this.byId("controlSelect"),
aControlResults = oEvent.results,
aResult = [{
"control" : {
id: "All",
name: "All"
}
}],
aData = aResult.concat(aControlResults);
oSelectControl.setModel(new sap.ui.model.json.JSONModel(aData));
},
使用组合框并将selectAll添加到项目列表应该可以工作。然后,在selection change事件中,可以使用oEvent.getParameterchangedItem,然后仅使用oEvent.oSource.SetSelectedKeyRes检查selectAll选项是否已被选中,其中res是所有项,或者如果selectAll选项已被取消选中,则仅为null。方面过滤器更适合您的要求,因为它以“全部”作为选择选项提供选择我不完全了解您真正想要实现的目标。如果你想让用户选择“无”,为什么要添加一个All项?@boghyon,这是Filter Bar@StephenS中的一个控件,似乎我需要在my data.json中添加过滤器来配置Facet Filter?我的问题可能与尝试过的ActionSelect重复,但action按钮在底部,如果有很多数据,很难找到它。我明白了。如果是关于过滤的,你可能想试试而不是FilterBar。用户可以清楚地看到他选择的过滤器,您也可以选择全部删除过滤器。否则,如果您想坚持使用FilterBar,那么ComboBox或FacetFilter也是不错的选择。对不起,我不太明白,FnSucture是setModel或其他的回调函数。如果您从后端获取数据,FnSucture是oData模型的success函数。否则oData提到的是fnsucture函数是您自己现有的数组。它可以工作,添加所有内容而不修改背景数据。与我在filter中的datapicker和timepicker设计有点不一致,但我可以使用它。谢谢。