2012-06-26 21 views
6

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

このポップアップでは、いくつかのオプション(デフォルトの「共有アイテムを開く」ダイアログに似ています)とOK/Cancelボタンのコンボを表示します。キャンセルすると「キャンセル」イベントが発生し、エディタは編集画面に戻ります。 "OK"では、フィールドの値をエディタで選択したものと一致するように変更して保存します。

FieldBuilderでのアプローチを使用しようとしましたが、サンプルBorisはthis other topicに記載されていますが、ポップアップダイアログからフィールドにアクセスできません。

モーダルポップアップからアイテムのxmlを変更したり、ページを変更したりする方法についてのご意見はありますか?

EDIT:コード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); 
    } 
} 

EDIT#2フランクのアドバイス、およびハイメ&フランクオフラインからいくつかの助けを借りた後、私は次のようにそれが動作するようになった

  1. ポップアップはCommand Extensionから呼び出されます(私の場合は& Close)
  2. command.jsは、私がイベントハンドラに選択した項目を(それがキーワードIDです)を通過しています(== OKを押した)私のポップアップで
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

を「提出」に呼び出されるイベントハンドラを指定します:

this.fireEvent("submit", { id: select.options[select.selectedIndex].value }); 

とすぐに戻ってイベントハンドラ_onPopupSubmit(e)私はちょうど、e.data.id読んでこのキーワードをロードし、ID &タイトルなどのプロパティを取得し、item.setMetadataを使用してアイテムのメタデータを更新中(「新更新された値を持つメタデータ ")。

シンプル:)

+1

ポップアップに表示されているコードを共有できますか?ほとんどの場合、あなたはどこかに「親」がありません。 –

答えて

4

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

は、だから、fieldBuilderを得るとき:

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

$表示はグローバル変数への参照です。これは、実際にはFieldBuilderをポップアップウィンドウ(これは持っていない)で探します。

は、コンポーネント・ウィンドウのFieldBuilderを取得するには、開幕戦からそれを得ることができます。

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

次のいずれかのコールバック関数または(カスタム)イベントでの更新された値を渡し、実際に検討する必要がありますしかし、それはあなたのポップアップの依存度を下げることになるからopener.トリック。

+0

おかげさまで、あなたの答えは私が必要としていたものの半分でした。短い議論の後、そしてあなたの洞察に基づいて、結果を "submit"イベントハンドラに戻しました。今すぐコードをアップ –

関連する問題