В чем разница между setJSON, setData и loadData? - PullRequest
0 голосов
/ 08 января 2019

Это касается упомянутых методов sap.ui.model.json.JSONModel в SAPUI5:

  • setJSON
  • setData
  • loadData

В чем разница между этими 3 методами? Когда мы используем эти методы и можем ли мы использовать более 1 из них для одной и той же цели?

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Взгляните на хорошо документированный Справочник по API для JSONModel.

В итоге (из документации 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: Загрузите данные в формате JSON с сервера, используя HTTP-запрос GET, и сохраните полученные данные JSON в модели. Примечание. Из-за ограничений безопасности браузера большинство запросов «Ajax» подчиняются одной и той же политике происхождения, поэтому запрос не может успешно получить данные из другого домена, субдомена или протокола.

например. Вы можете использовать это для загрузки / получения изменений данных / модели и автоматически обновляет представление, если эта конкретная модель была привязана путем перезагрузки URL-адреса. Если вы используете load , то, по моему мнению, вам не нужны другие два и 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, для модели.

т.е. То же, что и Set Data, но строгий JSON

0 голосов
/ 08 января 2019

К счастью, исходный код UI5 вполне читабелен и часто является лучшей документацией, чем большинство описаний API. Вот что в основном делает каждый из API:

setJSON

"Разбор текста 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
};

Источник

LoadData

«Загрузить данные с указанного удаленного URL и позвонить setData» -> Пожалуйста, проверьте источник здесь .


Короче говоря, все они в какой-то момент звонят setData.

Какой API вызывать, в какой ситуации зависит от того, в каком формате у вас есть доступные данные.

  • Данные в тексте JSON -> setJSON
  • Данные находятся где-то еще -> loadData
  • У меня уже есть данные в объекте / массиве JS ---> setData
0 голосов
/ 08 января 2019

УстановитьДанные

У вас есть объект 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, который возвращает данные в виде JSON, и хотите использовать эти данные в качестве модели

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