6

エディターがコンポーネントをいくつかの値(この場合は過去の日付フィールド)で保存しようとすると表示されるモーダルポップアップがあります。

このポップアップでは、エディターにいくつかのオプション(デフォルトの[共有アイテムを開く]ダイアログと非常によく似ています)と[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の助けを借りて、次のように機能させることができました。

  1. ポップアップはコマンド拡張機能から呼び出されます(私の場合は保存して閉じる)
  2. 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( "更新された値を持つ新しいメタデータ")を使用してアイテムのメタデータを更新します。

単純 :)

4

1 に答える 1

4

コードはポップアップで実行されるため、グローバル変数への参照はすべてポップアップウィンドウから取得されます。

したがって、fieldBuilderを取得すると、次のようになります。

var fieldBuilder = $display.getView().properties.controls.fieldBuilder;

$ displayは、グローバル変数への参照です。したがって、これは実際にはポップアップウィンドウでFieldBuilderを検索します(フィールドビルダーはありません)。

コンポーネントウィンドウのFieldBuilderを取得するには、オープナーから取得できます。

var fieldBuilder = opener.$display.getView().properties.controls.fieldBuilder;

ただし、実際に更新された値をコールバック関数または(カスタム)イベントのいずれかに渡すことを検討することをお勧めします。これにより、ポップアップがopener.トリックに依存しにくくなります。

于 2012-06-26T14:28:06.093 に答える