setJSON,setData和loadData有什么区别?

时间:2019-01-08 05:16:44

标签: sapui5 jsonmodel

这与SAPUI5中提到的sap.ui.model.json.JSONModel的方法有关:

  • setJSON
  • setData
  • loadData

这三种方法有什么区别?我们什么时候使用这些方法,并且出于相同的目的,我们可以使用其中的一种以上吗?

3 个答案:

答案 0 :(得分:1)

setData

  

您有一个JavaScript对象,并希望将此数据用作模型

const oJSONData = {
    data: {
        id: 4,
        first_name: "Eve",
        last_name: "Holt",
        avatar: "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
    }
};
oJSONModel.setData(oData);

setJSON

  

您有一个字符串,该字符串在解析时表示一个JavaScript对象,并希望将此数据用作模型

const sJSONData = '{"data":{"id":4,"first_name":"Eve","last_name":"Holt","avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"}}';
oJSONModel.setJSON(sJSONData);

loadData

  

您要访问一个远程API,该API以JSON格式返回数据,并希望将此数据用作您的模型

const sURL = "https://reqres.in/api/users/4";
oJSONModel.loadData(sURL);

答案 1 :(得分:1)

看看JSONModel记录良好的 API Reference

摘要(来自SAP文档):

setData :设置作为JS对象树传递的数据到模型。

例如

var data = {
  "ProductCollection": [{
    "titleId": 0,
    "Name": "Olayinka O",
    "ProductId": "001",
    "chartValue": 75,
    "ProductPicUrl": "sap-icon://competitor"
  }]
};


var oModel = new sap.ui.model.json.JSONModel(data);

//OR 
var oModel = new sap.ui.model.json.JSONModel(); 
oModel.setData(data); 


/*setdata, could also be a odata url in json format*/

loadData : 使用GET HTTP请求从服务器加载JSON编码的数据,并将结果JSON数据存储在模型中。注意:由于浏览器的安全限制,大多数“ Ajax”请求都受同一原始策略的约束,该请求无法成功地从其他域,子域或协议检索数据。

例如您可以使用它来加载/获取对数据/模型的更改,如果通过重新加载url绑定了特定模型,则可以自动更新视图。 如果您使用负载,则我认为不需要另外两个和loadData,因为它们不适用于本地json数据。

var sURL = "https://cors-anywhere.herokuapp.com/https://services.odata.org/V3/Northwind/Northwind.svc/Products?$format=json";
var oModel = new sap.ui.model.json.JSONModel();

//if called in setInterval, all changes in the backend will be updated in the view if binded in this case every second

setInterval(oModel.loadData(sURL, true), 1000);

setJSON : 将数据(以JSON格式的字符串形式传递)设置到模型。

即与设置数据相同,但使用严格的JSON

答案 2 :(得分:1)

幸运的是,与大多数API描述相比,UI5的源代码非常易读,并且通常是更好的文档。以下是每个API的基本功能:

setJSON

“解析JSON文本并调用setData

JSONModel.prototype.setJSON = function(sJSON, bMerge) {
    var oJSONData;
    try {
        oJSONData = jQuery.parseJSON(sJSON);
        this.setData(oJSONData, bMerge);
    } catch (e) {
        // ...
    }
};
     

Source

setData

“存储数据并通知所有相关绑定(checkUpdate)”

JSONModel.prototype.setData = function(oData/*plain JS object*/, bMerge){
    if (bMerge) {
        this.oData = /* merge with existing data */;
    } else {
        this.oData = oData;
    } // ...
    this.checkUpdate(); // notifies dependent bindings
};
     

Source

loadData

“从给定的远程URL加载数据并调用setData”->请检查source here


简而言之,他们都在某个时刻呼叫setData

在哪种情况下要调用哪个API取决于可用数据的格式。

  • 数据以JSON文本-> setJSON
  • 数据在其他地方-> loadData
  • 我已经在JS对象/数组中得到了数据---> setData