这与SAPUI5中提到的sap.ui.model.json.JSONModel
的方法有关:
setJSON
setData
loadData
这三种方法有什么区别?我们什么时候使用这些方法,并且出于相同的目的,我们可以使用其中的一种以上吗?
答案 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的基本功能:
“解析JSON文本并调用setData
”
JSONModel.prototype.setJSON = function(sJSON, bMerge) { var oJSONData; try { oJSONData = jQuery.parseJSON(sJSON); this.setData(oJSONData, bMerge); } catch (e) { // ... } };
“存储数据并通知所有相关绑定(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 };
“从给定的远程URL加载数据并调用setData
”->请检查source here。
setData
。在哪种情况下要调用哪个API取决于可用数据的格式。
setJSON
loadData
setData