カスタムコントロールを新しいsap.ui.define
ファッションに書きたいと思います。別のファイルにコントロールレンダラーを実装する際に問題があります。forbidden by SAPの間にbExport = true
を入れなければならないようです。"sap.ui.define"スタイルのSAPUI5コントロールレンダラーの作成
bExport:グローバル名への輸出が必要とされているかどうか - SAP所有のコードで使用されなければならないだけ
私は輸出ハックを利用しないレンダラの実装のいずれかの例を発見していないと私はそのような方法が存在するかどうか疑いがある。
私はいくつかの提案を持っているが、彼らは完全に私を満たしていない:
- SAPの要求を無視し、
bExport = true
を使用しています。長所:SAPコードの再利用率が高く、一般的に標準ロジックに従います。短所:公式の推奨事項を避ける。 my.namespace.control.GreatControlRenderer
を工場出荷時の機能から明示的に設定します。長所:シンプルですが、bExport
に触れません。短所:モジュール設計を破ります(モジュールが実際にグローバル変数を設定するため)。
この問題を解決するには、どのような方法が最適ですか? - 実際には親クラスメソッド内 sap.ui.base.Metadata.createClass()
sap.ui.define(/* bExport = */ true)
sap.ui.core.Control.extend()
:技術的には、公共利用可能なオブジェクト参照が両方において、jQuery.sap.setObject
方法でフレームワークコード内に作成され
このメソッドは、グローバルスコープ内でオブジェクトの階層を作成します。次のようにオブジェクトdot.separated.qualified.name
によりPE:
jQuery.sap.setObject = function(sName, vValue, oContext) {
var oObject = oContext || window,
aNames = (sName || "").split("."),
l = aNames.length,
i;
if (l > 0) {
for (i = 0; oObject && i < l - 1; i++) {
if (!oObject[aNames[i]]) {
oObject[aNames[i]] = {};
}
oObject = oObject[aNames[i]];
}
oObject[aNames[l - 1]] = vValue;
}
};
私はそれが 'MyControl = Control.extend ...'でなければならないと思います。 – hirse
それを修正しました。ありがとう! – schnoedel
+ 1ed。しかし、私は、このアプローチは現在、レンダラーがないため(UI5は存在しない* TooltipBaseRenderer *を検索しようとします)、TooltipBaseなどの他の抽象モジュールから拡張するときには機能しません。 'bExport'に戻る。 :(https://embed.plnkr.co/33zFqa/ – boghyon