我有一个主详细信息页面应用程序,我们将路由器配置为在页面之间导航。
App.view.xml
<SplitApp id="rootControl" detailNavigate="onDetailNavigation">
</SplitApp>
的manifest.json
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewPath": "master",
"controlId": "rootControl",
"viewType": "XML",
"async":"true"
},
"routes": [
{
....
},
...
"targets": {}
...
应用程序是简单的员工CRUD应用程序,我已经为路由器配置了2条路由1用于创建/编辑,另一条用于显示
如果我从一个视图导航到另一个视图,我需要销毁视图,就像在页面开始时显示包含所有员工的主页面和详细信息页面显示employee1的显示视图。
我在显示视图上有“编辑”按钮,按下i导航详细信息页面从“显示”视图到“编辑视图”,此时我需要从路由器中删除显示视图,该视图已缓存。
如何实现这一目标?或者我需要采取不同的approch来解决缓存问题?或者我不应该想到记忆
尝试调用split onDetailNavigate of SplitApp
onDetailNavigation : function(oEvent){
console.log("Split app onDetailNavigation");
oEvent.getParameter('from').destroy();
}
下次再次返回同一视图时会出现错误
Error: The object with ID __xmlview4 was destroyed and cannot be used anymore.
答案 0 :(得分:1)
根据注释,您会销毁视图以保存两个视图分配的内存。我不认为这会带来任何实际好处。有三种可能的解决方案:
<Input value="{applicationModel>/propertyName}" editable="{applicationModel>/Attributes/propertyName/editable}"/>
我正在使用第三种解决方案的版本。我的应用程序模型(扩展JSONModel)包含应用程序数据以及控制属性的状态。控制器只在应用程序模型上调用setEditable来计算状态。使用这种方法,我避免将逻辑分布到应用程序的许多部分。
{{1}}
答案 1 :(得分:0)
由于我的问题是关于从缓存中销毁路由器的视图,我已经按照@boghyon注释并在我的代码中进行了一些更改,如下所示,在导航详细信息页面后删除页面,如下所示
var splitApp = this.getView().byId('rootControl');
splitApp.removeDetailPage(oEvent.getParameter('from'));
并从路由器中删除缓存视图我写了一些逻辑
var router = this.getOwnerComponent().getRouter();
for(var view in router._oViews._oViews){
if( router._oViews._oViews[view].sId === oEvent.getParameter('fromId'){
delete router._oViews._oViews[view];
}
}
破坏视野。
通过这样做多次加载视图,这不是我的要求的正确方法,我们遵循@matbtt答案。
感谢您提供有价值的输入。