я определил модель по умолчанию в manifest.json:Как получить единственный объект JSON в модели JSON?
"dataSources": {
"mainService": {
"uri": "/.../vehicleCollection",
"type": "JSON"
}
},
Тогда получить sap.ui.model.json.JSONModel по:
var model = oView.getModel();
var oObject = model.getJSON("/VEHICLES(0001)");
То, что я хочу, это транспортные средства, которые vehicleId является 0001 вместо этого он вернулся весь массив транспортных средств в строке:
oObject = "{"VEHICLES":[{"vehicleId":"0001","route":...} {"vehicleId":"0005","route":...} ..."
мне было интересно, есть ли удобный способ получить один объект данных? Я пытаюсь привязать эти данные к моей странице подробностей в шаблоне главной детали.
Ссылка: https://sapui5.netweaver.ondemand.com/#docs/api/symbols/sap.ui.model.json.JSONModel.html
==== Обновление ====
JSON-структура (результат model.oData
данные и получить от "/.../vehicleCollection",
):
{"VEHICLES":[ { "vehicleId":"0001", "route":"..", ... }, { "vehicleId":"0005", "route: "..", ... }] }
=== = update =====
Я хотел бы поделиться своим обходным путем (это ОК, чтобы поместить их сюда?), Я признаю, что это очень уродливо, поэтому я надеюсь сделать его более элегантным, используя API UI5.
Master.controller.js
_showDetail : function (oItem) { var bReplace = !Device.system.phone; this.getRouter().navTo("object", { objectId : oItem.getBindingContext().getProperty("vehicleId") }, bReplace); },
Detail.controller.js
_onBindingChange : function() {
var oView = this.getView(),
oElementBinding = oView.getElementBinding(),
oViewModel = this.getModel("detailView"),
sPath = oElementBinding.getPath(),
oResourceBundle = this.getResourceBundle(),
ObjectId = sPath.match(/'(.*?)'/)[1],
var JSONObject = oView.getModel().getJSON();
JSONObject = JSON.parse(JSONObject);
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else if (i == key && obj[key] == val) {
objects.push(obj);
}
}
return objects;
}
var oneVehicle = getObjects(JSONObject, "vehicleId", ObjectId);
oViewModel.setProperty("/route", oneVehicle[0]['route']);
},
Detail.view.xml
<ObjectStatus text="{detailView>/route}"/>
Вы можете попробовать: 'вар OData = model.getProperty ("/ АВТОМОБИЛИ (0001)") .getObject(); console.log (oData); ' –
@Rahul Bhardwaj' model.getProperty ("/ VEHICLES (0001)") 'возвращено undefined – Tina
Можете ли вы вставить свой автомобильCollection и' console.log (model.getData()) '? –