現在、sap.m.Input
フィールドを拡張して、ラベルの配置をスタイルして拡張できるようにしようとしています。 レンダリングは正常に動作しますが、何とかデータバインディングがプロセスで失われてしまい、なぜそれがわかりませんか。これは私のコントロールです:カスタムコントロール - データバインディングが機能しない
sap.ui.define([
'sap/m/Input',
], function(Input) {
'use strict';
return Input.extend('one.sj.control.BhTextInput', {
metadata: {
properties: {
label: {
type: 'string',
},
},
aggregations: {
icon: {
type: 'sap.ui.core.Icon',
multiple: false,
visibility: 'public',
},
},
},
renderer: function(oRM, oControl) {
oRM.write('<div class="formControl">');
oRM.write('<input placeholder="'+oControl.getPlaceholder()+'"');
oRM.write('type="'+oControl.getType()+'"');
oRM.write('value="'+oControl.getValue()+'"');
oRM.writeClasses();
oRM.writeControlData(oControl);
oRM.write('/>');
oRM.write('<label class="inputLabel" for="'+oControl.getId()+'"');
oRM.write('>');
oRM.renderControl(oControl.getIcon());
oRM.write('<span class="inputLabelContent">');
oRM.write(oControl.getLabel());
oRM.write('</span>');
oRM.write('</label>');
oRM.write('</div>');
},
});
});
ご覧のとおり、非常に簡単です。 これは、私はそれを使用する方法:
<sj:BhTextInput
id="username" class="input textInput"
placeholder="{i18n>HINT_USERNAME}" value="{creds>/username}"
type="Text">
<sj:icon>
<core:Icon src="sap-icon://email" class="inputIcon" />
</sj:icon>
</sj:BhTextInput>
私は、私は上記のrenderer
方法で手動<input/>
建設を交換するとき、それは正常に動作しているが、私のモデルの問題ではありません確認して:
sap.m.InputRenderer.render(oRM, oControl);
何か間違った点がありますか?ありがとう!
EDIT:「データバインディングが失われる」ということを少し明確にするために、私はこのような私のコントローラ内の入力フィールドにバインドされた値にアクセスするときに空の文字列を取得しています:getModel('creds').getProperty('/username');
。これは、上で書かれた手動構築を置き換えるときに機能します。
ありがとうございました。私はwriteAttributeについて知らなかった。残念ながら、これは何も変わらない。私の現在の解決策は、InputRendererを使用することです。私は、Inputが実際にレンダリングされていないので、InputのonAfterRenderingも呼び出されていないと考えられます。 – puelo
生成されたHTMLタグを共有できますか? – amiramw