Javascript 如何使用UI5中的IconPool在对话框中选择图标

Javascript 如何使用UI5中的IconPool在对话框中选择图标,javascript,select,dialog,icons,sapui5,Javascript,Select,Dialog,Icons,Sapui5,您好,我需要帮助在带有ValueHelp的SelectDialog中集成UI5的IconPool。您应该能够选择所有图标 我的代码: Home.controller.js handleValueHelp:function(){ var loadDialog=this.loadFragment(“myValueHelpFragment”,this) loadDialog.then(函数(oSelectHelpDialog){ this.getView().addDependent(this.oS

您好,我需要帮助在带有ValueHelp的SelectDialog中集成UI5的IconPool。您应该能够选择所有图标

我的代码: Home.controller.js

handleValueHelp:function(){
var loadDialog=this.loadFragment(“myValueHelpFragment”,this)
loadDialog.then(函数(oSelectHelpDialog){
this.getView().addDependent(this.oSelectHelpDialog);
var oBinding=oSelectHelpDialog.getBinding(“项”);
oBinding.filter([]);
oSelectHelpDialog.open();
}.约束(这个);
},
您正在视图中使用“命名模型”(myModel)进行字段绑定:
{myModel>图标}
。 但是您在Component.js中使用默认模型:
oDialog.setModel(oModel)

使用此语法应将模型设置为在XML视图中使用的命名模型:

oDialog.setModel(oModel, "myModel")
您还需要在项目路径中引用命名模型

items="{ path : 'myModel>/icons'}"
或者,只需从
{myModel>图标}
{myModel>IconText}
中删除
myModel>
——只要没有其他默认模型

<StandardListItem
            id="iconInputHelpId"
            icon="{Icon}"
            title="{IconText}"/>

您的代码中有一些误解

命名模型 绑定StandardListItem时为模型使用了名称


但是,在绑定items聚合和将模型设置为视图时,您没有使用该名称

items=”{
路径:“/图标”
}">
oDialog.setModel(oModel)
正如@Bernard所说,你要么完全放弃这个名字,要么始终如一地使用它

绑定路径
IconPool.getIconNames()
返回字符串的平面列表。因此,您的模型结构将如下所示:

{
图标:[
“意外休假”,
“帐户”,
“扳手”,
“门窗”,
“洗衣机”,
...
]
}
UI5使用当前绑定(假设模型名问题将得到解决)尝试从JSONModel加载以下内容:

"/icons/0/Icon"
"/icons/0/IconText"
但是图标数组中的项目没有属性
图标
图标上下文
。它们只是线

现在,您必须从scrath构建图标路径。这可以直接在XML中完成


使用空路径(这是一个相对路径,因为它不是以
/
开头)将按原样接收项目。在大多数情况下,这是不好的,因为项是具有属性的对象。在您的例子中,项是一个字符串,因此这是完美的

这样你就不需要工厂了

工作示例: