Data binding 绑定绑定上下文时,手动重新加载会导致错误
在实现基本控制器时,我遇到了一个意外错误。当用户导航到视图时,下面的代码工作正常(意味着创建了bindingContext)。如果用户手动重新加载页面,则上下文保持未定义状态。我调试了代码,模型在两种场景中都是同一个对象。现在,我添加了一个手动检查来防止错误。问题是:为什么不创建绑定上下文? 干杯Data binding 绑定绑定上下文时,手动重新加载会导致错误,data-binding,sapui5,Data Binding,Sapui5,在实现基本控制器时,我遇到了一个意外错误。当用户导航到视图时,下面的代码工作正常(意味着创建了bindingContext)。如果用户手动重新加载页面,则上下文保持未定义状态。我调试了代码,模型在两种场景中都是同一个对象。现在,我添加了一个手动检查来防止错误。问题是:为什么不创建绑定上下文? 干杯 sap.ui.define([ "de/nordakademie/bookatrip/controller/BaseController", "sap/ui/core/routing/
sap.ui.define([
"de/nordakademie/bookatrip/controller/BaseController",
"sap/ui/core/routing/History",
"sap/m/MessageToast"],
function (BaseController, History, MessageToast) {
"use strict";
return BaseController.extend("de.nordakademie.bookatrip.controller.BaseDetail", {
onInit: function () {
this._getRouter()
.getRoute("detail")
.attachPatternMatched(this._onDetailRouteMatched, this);
},
_onDetailRouteMatched: function (oEvent) {
const oArgs = oEvent.getParameter("arguments");
const oView = this.getView();
const i18n = this.getI18nBundle();
const oContext = oView
.getModel("trip")
.createBindingContext("/" + oArgs.path);
/**
* in case of manual browser reload, binding the context will fail (why?)
* to prevent unexpected errors on tis view, the user will be navigated to
* previous page
*/
if (oContext) {
oView.setBindingContext(oContext, "trip");
} else {
MessageToast.show(i18n.getText("detail.binding.navback"),
{closeOnBrowserNavigation: false});
this.onNavButtonPress()
}
}
});
手动创建BindingContext有什么具体原因吗?通常我们使用该方法来绑定视图 当您使用bindElement方法时,如果重新加载页面(实际上不是完全重新加载,而是重新匹配相同的路由),那么框架将负责重用现有绑定 试着这样做:
_onDetailRouteMatched: function (oEvent) {
const oArgs = oEvent.getParameter("arguments");
const oView = this.getView();
const i18n = this.getI18nBundle();
oView.bindElement({
model: "trip",
path: "/" + oArgs.path
});
}
Obs:您还可以将模型名称作为路径的一部分进行绑定,如下所示:
oView.bindElement("{trip>/" + oArgs.path + "}");