SAPUI5从JSON-Model获取单个属性

时间:2014-10-10 08:27:31

标签: json model attributes sapui5

我目前正试图弄清楚如何从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的值存储在单个变量中。

console.log-statement

我已经尝试过gConfigModel.getProperty(' /'),没有用。试图访问gConfigModel.oData未定义..如何将其存储在单个值中?

解决方案评论:如果从后端捕获数据,则必须注意需要多长时间。数据可以在预期之后使用,在我的情况下我添加了1s超时,之后我可以轻松访问该属性

 setTimeout(function() {
     console.log(gConfigModel.getProperty('/Editable'));
 }, 1000);

3 个答案:

答案 0 :(得分:4)

我不建议使用模型的getData()方法,因为它已被弃用。

更好的解决方案是使用gConfigModel.getProperty("/Editable") (我在这里使用根斜杠,因为你的属性位于模型的根目录中)

同样,您也可以设置数据: 而是gConfigModel.setProperty("/Editable", <your new value>)

答案 1 :(得分:1)

&#13;
&#13;
<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;
&#13;
&#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");

    });