我每次查看页面时都会搜索模式以执行代码(在我的情况下,检索数据以便从服务器可视化)(每个tipe页面都由splitApp.toDetail或splitApp.backDetail调用).我该怎么做??onBeforeRendering和onAfterRendering仅在第一次执行..
我希望在每次显示视图之前做一些逻辑.我不能在渲染方法之前使用它,因为它只在创建视图时被调用一次并且首次显示.帮助.任何想法?
我在 SAPUI5 应用程序中有一个 Detail 视图,其中包含一个 ID 的输入字段"bestellmenge_tu"。每当调用此视图时,焦点应位于该输入字段上。不幸的是,当在控制器的onInit方法中将焦点设置在字段上时,焦点将被设置,但几毫秒后 UI5 将其拿走并将其转移到详细信息视图的“导航返回”按钮。
通过将 alog.trace()放在输入字段的blur事件上,我发现焦点被一个sap.ui.define.NavContainer._afterTransitionCallback被调用的方法夺走了,该方法被异步调用(window.setTimeout触发器和执行之间的一些s)。该函数只是在视图中查找第一个可聚焦的元素,然后粗暴地将焦点切换到它上面。
我的解决方法是重新定义jQuery.fn.firstFocusableDomRef用于查找“第一个可聚焦元素”的方法:
// DIESE KANONE FUNKTIONIERT
jQuery.fn.firstFocusableDomRef = (function() {
var _default = jQuery.fn.firstFocusableDomRef;
return function() {
var bestellmenge_tu = document.querySelector("input[id$='bestellmenge_tu-inner']");
if (bestellmenge_tu &&
bestellmenge_tu.style.display !="none" &&
bestellmenge_tu.style.visibility != "hidden") return bestellmenge_tu;
else return _default.apply(this);
}
})();
Run Code Online (Sandbox Code Playgroud)
但这可能是一个性能问题(querySelector在此后的任何页面加载的DOM 横向期间调用),并且对于所需的效果来说代码太多。
有没有更简单的方法来实现这一目标?
我想到了类似的东西
<mvc:View controllerName="zrt_dispo.view.Detail"...>
<Page id="detailPage" initialFocus="bestellmenge_tu"> <!-- ID of the element to …Run Code Online (Sandbox Code Playgroud) 我尝试创建一个SAPUI5/OPENUI5应用程序.为此,我使用了一些XML视图,并在路由器之间进行导航.现在我想在每次打开特定视图时调用方法.在阅读了"onBeforeRendering"方法解决了这种情况之后,我实现了这个功能.当我第一次导航到视图时,使用了该方法,但在第二次调用中没有.
这里是View-Controller的代码:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel"],
function(Controller , JSONModel) {"use strict";
return Controller.extend("Spellcheck.controller.Result", {
onBeforeRendering: function() {
this.model = new sap.ui.model.json.JSONModel({
suggestionData: []
});
this.getView().setModel(this.model);
this.model.refresh();
this.getCorrections();
},
getCorrections : function() {
//...some other code...
}
Run Code Online (Sandbox Code Playgroud)
我希望有人知道我的问题的原因和/或合适的解决方案
提前致谢!!!
蒂姆
sapui5 ×4