У меня возникли проблемы с пониманием изменения «этой» ссылки в моем коде. Итак, есть три вещи, которые я не получаю:SAPUI5 - Проблемы с объемом «этого». ссылка на объект
1) Когда я пытаюсь получить мою модель в функции init (array1 в строке 10), я получаю «не могу прочитать свойство« getProperty »неопределенного». Но я могу получить доступ к модели моего представления в представлении xml, так как я определил модель в своем manifest.json и использую манифест в своем приложении Component. Почему я не могу получить доступ к модели в контроллере через this.getView(). GetModel?
2) В моем методе onDetailRouteHit я могу получить модель отлично с this.getView(). GetModel - (array2).
3) Когда я вызываю метод _Test(), я получаю сообщение «не могу прочитать свойство getProperty« неопределенной »ошибки снова (array3).
Так почему я не могу получить доступ к модели в init, но в onDetailRouteHit. И почему я не могу получить доступ к нему в onDetailRouteHit, но не в функции, которую я вызываю после этого? Я привык к Java, где это ссылается на текущий объект, что я предполагаю быть контроллером, который я сейчас использую в моем примере. Существуют ли «правила» этой области действия в javascript/UI5?
sap.ui.define([
"sap/ui/core/mvc/Controller"
], function(Controller) {
"use strict";
return Controller.extend("test.controller.Detail", {
onInit: function() {
var array1 = this.getView().getModel("myData").getProperty("/myDataSet");
this.oRouter = this.getOwnerComponent().getRouter();
this.oRouter.getRoute("detail").attachPatternMatched(this._onDetailRouteHit.bind(this));
},
_onDetailRouteHit: function(oEvent) {
var array2 = this.getView().getModel("myData").getProperty("/myDataSet");
this._Test();
},
_Test: function() {
var array3 = this.getView().getModel("myData").getProperty("/myDataSet");
}
});
});
Если 'this' была различной во всех трех методах, тогда ваша ошибка msg, вероятно, была бы чем-то вроде 'can not read property 'getView''. Таким образом, я предполагаю, что это связано со временем. – Marc
Если это связано с синхронизацией, не должна ли последняя ссылка на модель в массиве 3 работать, так как она уже загружена раньше в array2? – manban
Да, он должен работать, и он работает в моем приложении (протестировал его прямо сейчас ..такая же проблема с onInit, другие звонки работали) ... – Marc