Sapui5 如何在我的控制器中获取JSONModel的属性?
我需要在控制器中检索JSONModel的属性。 情况如下: 我有一个“问卷”模型(questionly.json),其中包含问题和答案。然后我有一个控制器(App.controller.js)。 在这个控制器中,我在onInit中创建了另一个名为“currentQuestion”的模型,因为我需要实现一个场景,当用户单击next按钮时,应该加载下一个问题。 我试图获取我的“问卷”模型的属性,但我遇到了一个错误: 无法读取未定义的“getProperty”的属性 您可以在此处看到模型数据和我的控制器: 问卷调查。jsonSapui5 如何在我的控制器中获取JSONModel的属性?,sapui5,Sapui5,我需要在控制器中检索JSONModel的属性。 情况如下: 我有一个“问卷”模型(questionly.json),其中包含问题和答案。然后我有一个控制器(App.controller.js)。 在这个控制器中,我在onInit中创建了另一个名为“currentQuestion”的模型,因为我需要实现一个场景,当用户单击next按钮时,应该加载下一个问题。 我试图获取我的“问卷”模型的属性,但我遇到了一个错误: 无法读取未定义的“getProperty”的属性 您可以在此处看到模型数据和我的控制
{
"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个元素的question属性的值?方法setModel(oModel,sName?)将模型设置到视图中。在代码中,将名为“currentQuestion”的模型设置为包含questionly.json文件中数据的视图。您可以在变量oCurrentQuestionModel中获得此模型。
请尝试通过以下代码从此模型获取属性:
oCurrentQuestionModel.getProperty(“/data/0/question”)代码>
在您的代码片段中,不清楚oQuestionModel是在哪里定义的。。我认为你应该改变
var oQuestionModel = this.getView().getModel("questionnaire");
到
因为您没有命名模型,所以它将成为默认模型
还有一件事我做错了,那就是我试图在init中得到这个模型
不幸的是,是的。这实际上是本例中模型未定义的主要原因。但不是因为模型没有加载。
我们知道应用程序描述符(manifest.json)中定义的模型以及这些模型会传播到组件的子组件。因此,从任何控制器调用view.getModel
都应该无缝地返回模型,因为它是在组件上全局设置的但是:组件上设置的模型不能通过使用相应的视图在任何控制器的onInit
中检索,因为。在onInit
中调用view.getParent
将返回null
。所以组件模型“调查问卷”还没有传播到您的视图中。正如您已经做的那样,通过使用组件而不是视图:this.getOwnerComponent().getModel(“modelName”)
和错误代码,可以在onInit
中轻松检索此类组件模型
无法读取未定义的“getProperty”的属性
已消失。oQuestionModel获取Model inventory.json,它是清单中我的json命名模型。您可以发布manifest.json和错误消息吗?我解决了它,我需要使用var oQuestionModel=this.getOwnerComponent().getModel(“调查问卷”)
获取命名模型,然后使用getProperty检索属性,如下所示:oQuestionModel.getProperty(“/data/0/question”)
我还做错了一件事,那就是我试图在init()中获取此模型,我想它给出我未定义的原因是因为模型未加载。所以我用不同的方法调用它,得到了结果。感谢您的帮助。通常您在manifest.json中定义模型,然后可以通过以下方式轻松访问它:oController.getView().getModel(nameInManifest.json)
var oQuestionModel = this.getView().getModel();