固定ヘッダーでsap.m.Table
を作成しようとしています。私はいくつかのaproachesを試してみましたが、そのうちの1つで何か変わったことが起きています。sap.m.Tableベースのカスタムコントロールでレンダラーを定義するときの奇妙な動作
私は(私は、これは無効なHTMLになります知っている)sap.m.Table
に基づいて新しいカスタムコントロールを作成し、(sap.m.ListBaseRerender
に基づいてsap.m.TableRenderer
に基づいて)レンダラを再定義tbody
とtfoot
周りdiv
を置くことをしようとしましたが、 CSSを介してdivをスクロール可能にします。このコードは現在のようにスクロールできません。余分な作業が必要です。
これは新しいコントロールです:
(function() {
var table = sap.m.Table.extend("sap.m.FixedHeaderTable2", {
metadata: {
properties: {},
aggregations: {},
events: {}
},
init : function(){
if (sap.m.Table.prototype.init) {
sap.m.Table.prototype.init.apply(this, arguments);
}
},
renderer: function (oRM, oControl) {
sap.ui.require("sap.ui.core.Renderer");
sap.ui.require("sap.m.TableRenderer");
var renderer = sap.ui.core.Renderer.extend(sap.m.TableRenderer);
renderer.renderListHeadAttributes = function(r, c) {
this.renderColumns(r, c, 'Head');
r.write("<div style=\"border:10px solid green\">");// ADDED
r.write('<tbody');
r.writeAttribute('id', c.addNavSection(c.getId('tblBody')));
r.write('>');
};
renderer.renderListEndAttributes = function(r, c) {
r.write('</tbody>');
c._hasFooter && this.renderColumns(r, c, 'Foot');
r.write("</div>");// ADDED
r.write('</table>');
}
renderer.render(oRM, oControl);
}
});
return table;
})();
renderListheadAttributesとrenderListEndAttributesはベースレンダラーの関数であり、それに対する唯一の変更は、「追加」コメントでマークされた行です。
私が手HTMLはこれで、あなたがthead
whith空のdivとtable
を見ることができ、tbody
とtfoot
:HTML image
だから私は私のレンダラでtbody
タグを変更しようとしました(行は「修正」でマークされた)に何が起こるかを参照してください。今
renderer.renderListHeadAttributes = function(r, c) {
this.renderColumns(r, c, 'Head');
r.write("<div style=\"border:10px solid green\">");// ADDED
r.write('<div');// MODIFIED
r.writeAttribute('id', c.addNavSection(c.getId('tblBody')));
r.write('>');
};
renderer.renderListEndAttributes = function(r, c) {
r.write('</div>');// MODIFIED
c._hasFooter && this.renderColumns(r, c, 'Foot');
r.write("</div>");// ADDED
r.write('</table>');
};
私div
は、内部の空div
が、table
まだthead
があり、tbody
ありnd tfoot
子供として。 HTML image
また、border-image: none;
がどこからも出現しています。これとレンダリングが意図したとおりに動作していないという事実は、DOMを変更するポストレンダリングのいくつかの種類が起こっていると私に思います。私が知る限り、これが起きる場所はonAfterRendering
ですが、そこにはないようです(addEventDelegateと空の関数を使ってonAfterRenderingを削除します)。
ここで、なぜこの「ポストレンダリング」が起こっていますか?
私はこれを行うには良い方法があることは承知している、と私は別のscrool内部スクロールが悪い(とモバイルデバイドで悪化)であることを知っています。私はすでに実用的なソリューションを持っています。
この質問は、固定ヘッダーでスクロールを達成する方法ではなく、なぜこの奇妙な動作が起こっているのかについてです。