我需要在控制器中检索我的JSONModel的属性。 方案如下:
我有一个“问卷”模型(questionnaire.json),其中包含问题和答案。然后我有一个控制器(App.controller.js)。 在这个控制器中,我在 onInit 中创建了另一个名为“currentQuestion”的模型,因为我需要实现一个场景,当用户点击下一个按钮时应该加载下一个问题。 我试图获得我的“问卷”模型的属性,但我面临一个错误:
无法读取未定义的'getProperty'的属性。
您可以在此处查看模型数据和我的控制器:
questionnaire.json
{
"data": [{
"question": "Which pet do you like from the following?",
"answers": ["Cats", "Rabbits", "Dogs", "Hamsters"],
"correct": 1
}, {
"question": "Which pet do you prefer from the following?",
"answers": ["Cats", "Dogs"],
"correct": 1
}, {
"question": "What food brand does your pet eat?",
"answers": ["Pedigree", "Catfood", "Rabbitfood", "HamstersFood"],
"correct": 1
}]
}
App.controller.js
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel"
], function(Controller, JSONModel){
Controller.extend("opensap.onlinequestionnaire.controller.App", {
onInit: function() {
this.questionSetUp();
this.getView().setModel(new JSONModel({
index: false,
question: {}
}), "currentQuestion");
var oCurrentQuestionModel = this.getView().getModel("currentQuestion");
var oQuestionModel = this.getView().getModel("questionnaire");
var iCurrentIndex = oCurrentQuestionModel.getProperty("/index");
var oQuestion = oQuestionModel.getProperty("/data/0/question");
console.log(oQuestion);
console.log(iCurrentIndex);
iCurrentIndex = iCurrentIndex ? ++iCurrentIndex : 0;
console.log(iCurrentIndex);
}
});
});
当我尝试质疑oQuestion
中的属性时,它会抛出错误。如何获取第0个元素的问题属性的值?
答案 0 :(得分:1)
我做错的另一件事是我试图在init中获得这个模型。 [src]
不幸的是,是的。这实际上是在这种情况下模型未定义的主要原因。但不是因为模型没有加载。
我们知道应用程序描述符(manifest.json)from the documentation中定义的模型are set to the component,并且这些模型会传播到组件的子项。因此,从任何控制器调用view.getModel
都应无缝返回模型,因为它在组件上设置了全局。 但是: not obvious的一点是,只有使用相应的视图onInit
,才能在任何控制器的view.getParent
中检索组件上设置的模型,因为view doesn't know its parent yet in that state。在onInit
中呼叫null
会返回onInit
。因此,组件模型“问卷”尚未传播到您的视图中。正如您已经这样做的那样,可以使用组件而不是视图this.getOwnerComponent().getModel("modelName")
在37 INFO 02:30.96 executePRScript(/tmp/IMC_01010000,prs.tws.script.cfg.unix): Enter.
38 INFO 02:32.52 PRS command used for execution:echo IMC=IMC >> /tmp/IMC_01010000/
codename.cfg&&chmod -R 755/tmp/IMC_01010000&&/tmp/IMC_01010000/prereq_checker.sh
IMC detail outputDir=/tmp/IMC_01010000
39 ERROR 02:32.53 PRS job is finished. Results are not available.
40 WARNING 02:32.53 Error occurred while executing executePRScript.
中轻松检索此类组件模型,并输入错误
无法读取未定义
的'getProperty'的属性
消失了。
答案 1 :(得分:0)
方法setModel(oModel,sName?)为您的视图设置模型。在您的代码中,您将视图名称为“currentQuestion”的模型设置为包含来自questionnaire.json文件的数据的视图。您可以在变量oCurrentQuestionModel中获得此模型。
请尝试通过以下代码从此模型获取属性:
oCurrentQuestionModel.getProperty("/data/0/question");
在您的代码段中,不清楚oQuestionModel的定义位置。
答案 2 :(得分:0)
在你的情况下。我想你应该改变
var oQuestionModel = this.getView().getModel("questionnaire");
到
var oQuestionModel = this.getView().getModel();
因为您没有为模型命名,因此它成为默认模型。