エディターがコンポーネントをいくつかの値(この場合は過去の日付フィールド)で保存しようとすると表示されるモーダルポップアップがあります。
このポップアップでは、エディターにいくつかのオプション(デフォルトの[共有アイテムを開く]ダイアログと非常によく似ています)と[OK]/[キャンセル]ボタンの組み合わせを表示します。キャンセル時に「キャンセル」イベントを発生させると、エディターは編集画面に戻ります。すべてここで問題ありません。「OK」で、編集者が選択したものと一致するようにフィールドの値を変更してから保存します。
FieldBuilderでアプローチを使用しようとしましたが、この他のトピックで言及されているサンプルのBorisを使用しました が、ポップアップダイアログからフィールドにアクセスできません。
モーダルポップアップからアイテムのxml(ページの場合もあります)を変更する方法についての提案はありますか?
編集:getControlForFieldNameで使用されるコード
function getControlForFieldName(name) {
var fieldBuilder = $display.getView().properties.controls.fieldBuilder;
var fieldsContainer = fieldBuilder.properties.input;
var fieldsNode = fieldsContainer.getElement();
var fieldContainer = $dom.getFirstElementChild(fieldsNode);
while (fieldContainer) {
var labelNode = $dom.getFirstElementChild(fieldContainer);
var fieldNode = $dom.getNextElementSibling(labelNode);
var control = fieldNode.control;
if (control.getFieldName() == name) {
return control;
}
fieldContainer = $dom.getNextElementSibling(fieldContainer);
}
}
編集#2
フランクのアドバイスと、オフラインのJaime&Frankの助けを借りて、次のように機能させることができました。
- ポップアップはコマンド拡張機能から呼び出されます(私の場合は保存して閉じる)
- command.jsは、「送信」時に呼び出されるイベントハンドラーを指定します(== OKが押されました)
$evt.addEventHandler(p.dialogPopup, "submit",
this.getDelegate(this._onPopupSubmit));
ポップアップで、選択したアイテム(キーワードID)をイベントハンドラーに渡します。
this.fireEvent("submit", { id: select.options[select.selectedIndex].value });
そして今、イベントハンドラー_onPopupSubmit(e)
に戻って、e.data.idを読み取り、このキーワードをロードし、IDやタイトルなどのプロパティを取得し、item.setMetadata( "更新された値を持つ新しいメタデータ")を使用してアイテムのメタデータを更新します。
単純 :)