そこで、コントローラーに必要な EntitySet をプリロードすることで、この問題を解決しました。それが最善の方法かどうかはわかりませんが、希望どおりに機能します。コントローラーの "onBeforeRendering" メソッドで ProductSet をプリロードするため、ビューの他の非同期呼び出しが行われたときにデータが既に利用可能になります。
onBeforeRendering:function(){
this.loadProductSet();
},
loadProductSet: function () {
return new Promise(function (resolve, reject) {
this.getView().getModel().read("/ProductSet", {
success: function (oData) {
resolve();
}.bind(this),
error: function (oError) {
reject();
}.bind(this)
});
}.bind(this));
},
XML ビューでは、フォーマッターを使用して特定のセットの ID を渡します。
<ObjectAttribute title="Name" text= "{parts :['ProductKey'], formatter: '.formatter.getProductSet' }" />
そしてここにフォーマッタコード:
getProductSet: function (sProductKey) {
var oModel = this.getView().getModel();
var sProductName = oModel.getProperty("/ProductSet('" + sProductKey + "')/ProductName");
return sProductName;
}
しかし、XML でパラメータを動的に渡す方法があれば、それは非常に素晴らしいことです :) いつの日かそれが実装されることを願っています。