XML 中的动态上下文绑定
Dynamic Context Binding in XML
我有来自后端的 odata。我的 SAPUI5 页面上有两个 select 控件。第一个 select 显示从后端收到的项目列表。第二个 select 根据第一个 select 控件 select 编辑的内容而变化。
现在我正在控制器中为 "planets" select 构建一条新路径。是否可以根据 "stars" selected 项目更改 "planets" 项目路径,就在 XML 中?不使用 Javascript?
我想做这样的事情:
<Select id="stars"
items="{
path: '/Stars'
}">
<core:Item key="{StarID}" text="{StarName}" />
</Select>
<Select id="planets"
items="{
path: '("/Stars('" + StarID + "')/toPlanets"'
}">
<core:Item text="{PlanetName}" />
</Select>
不幸的是,我不相信在 UI5 中有任何现有的功能可以天真地做这样的事情。唯一相似的是 XML 预处理期间的绑定替换,但您不能将其用于您的情况。
我过去遇到过很多次这种情况,并创建了一个帮助控件来处理这个问题(可能不是完美的解决方案,但它有效)。如果你在多个地方有这种构造,那么使用类似的方法才有意义(这样你就可以避免在你的 JS 控制器中使用相同的样板代码)。
您可以找到 here an example implementation of such a control and here 示例用法。基本上,这允许您有一个可重用的机制来执行这样的操作 "indirect binding",而无需求助于事件侦听器。
我有来自后端的 odata。我的 SAPUI5 页面上有两个 select 控件。第一个 select 显示从后端收到的项目列表。第二个 select 根据第一个 select 控件 select 编辑的内容而变化。
现在我正在控制器中为 "planets" select 构建一条新路径。是否可以根据 "stars" selected 项目更改 "planets" 项目路径,就在 XML 中?不使用 Javascript?
我想做这样的事情:
<Select id="stars"
items="{
path: '/Stars'
}">
<core:Item key="{StarID}" text="{StarName}" />
</Select>
<Select id="planets"
items="{
path: '("/Stars('" + StarID + "')/toPlanets"'
}">
<core:Item text="{PlanetName}" />
</Select>
不幸的是,我不相信在 UI5 中有任何现有的功能可以天真地做这样的事情。唯一相似的是 XML 预处理期间的绑定替换,但您不能将其用于您的情况。
我过去遇到过很多次这种情况,并创建了一个帮助控件来处理这个问题(可能不是完美的解决方案,但它有效)。如果你在多个地方有这种构造,那么使用类似的方法才有意义(这样你就可以避免在你的 JS 控制器中使用相同的样板代码)。
您可以找到 here an example implementation of such a control and here 示例用法。基本上,这允许您有一个可重用的机制来执行这样的操作 "indirect binding",而无需求助于事件侦听器。