我目前正试图弄清楚如何从sap.ui.model.json.JSONModel中检索单个值
在我的主视图中:
var gConfigModel = new sap.ui.model.json.JSONModel();
var getConfigCallback = function(config) {
gConfigModel.setData(config);
};
oController.getConfiguration(getConfigCallback);
console.log(gConfigModel);
在我的控制器中:
getConfiguration : function(callback) {
var sServiceUrl = "/sap/opu/odata/sap/xxx/ConfigurationSet('Initialize')";
var config = {};
callback(config);
$.getJSON(sServiceUrl).done(function(data) {
config = data.d;
callback(config);
});
},
在我的console.log语句中,我可以看到数据已成功从后端传递并成功设置为JSON模型。我的要求是将属性Editable的值存储在单个变量中。
我已经尝试过gConfigModel.getProperty(' /'),没有用。试图访问gConfigModel.oData未定义..如何将其存储在单个值中?
解决方案评论:如果从后端捕获数据,则必须注意需要多长时间。数据可以在预期之后使用,在我的情况下我添加了1s超时,之后我可以轻松访问该属性
setTimeout(function() {
console.log(gConfigModel.getProperty('/Editable'));
}, 1000);
答案 0 :(得分:4)
我不建议使用模型的getData()
方法,因为它已被弃用。
更好的解决方案是使用gConfigModel.getProperty("/Editable")
(我在这里使用根斜杠,因为你的属性位于模型的根目录中)
同样,您也可以设置数据:
而是gConfigModel.setProperty("/Editable", <your new value>)
答案 1 :(得分:1)
<script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-theme="sap_bluecrystal" data-sap-ui-libs="sap.m"></script>
<script>
function getConfiguration(callback) {
var sServiceUrl = "/sap/opu/odata/sap/xxx/ConfigurationSet('Initialize')";
var config = {};
var data = {
"d": {
"_metadata": "",
"Backup01": "01",
"Editable": "True"
}
};
setTimeout((function() {
config = data;
callback(config);
})(), 2000);
};
var gConfigModel = new sap.ui.model.json.JSONModel();
var getConfigCallback = function(config) {
gConfigModel.setData(config);
alert(gConfigModel.getProperty("/d/Editable"));
};
getConfiguration(getConfigCallback);
</script>
&#13;
答案 2 :(得分:1)
首先,感谢您努力寻找我们问题的解决方案! (至少,那些关于它的东西.. :))
我发现了一个解决方案,我认为这个解决方案有点多余,因为超时可能有些随意 - 这取决于机器或要获取的数据量?
因此,我使用attachRequestCompleted
函数:
with sUrl_2="path-to-my-service";
var oModel_2 = new sap.ui.model.json.JSONModel(sUrl_2);
oModel_2.attachRequestCompleted(function(data) {
//now, i can access the data stored in the oModel_2, either by getProperty, or by DOM: oModel_2.oData.d.Vendor
gv_selLieferant = oModel_2.getProperty("/d/Vendor");
gv_selEinkOrg = oModel_2.getProperty("/d/PurchOrg");
gv_selEinKGru = oModel_2.getProperty("/d/PurGroup");
});