2016-11-04 6 views
1

良い一日からExtJSの中の親コントローラ機能を呼び出し、私はこの簡単な問題に打たよ、私はもう一度あなたのアドバイスを必要とする:は、すべてのiframe

私は私はしませんでした(ExtJSのアプリケーションを編集しています行う)。このアプリケーションでは は、外部のhtmlファイル、定義された呼び出しのiframe、いくつかの点であります。

items: [{ 
     xtype: "component", 
     id: "dasboardM", 
     autoEl: { 
      tag: "iframe", 
      width: '100%', 
      height: '95%', 
      src: "/resources/extendpanel/dashboard.html" 
     } 
    }] 

を私はIFRAMEからビューコントローラで定義された関数を呼び出す必要が、あることを、いくつかの機能があるでしょう呼ばれ、今の私は、簡単なテストケースをsettedてきたので、私は次のようにインラインフレームを持つビューファイルのためのコントローラを作成しました:うまく

Ext.define('Dor3.view.merch.MerchController', { 
    extend: 'Ext.app.ViewController', 
    alias: 'controller.merch', 
    ... 
    onIframeCall : function(){ 
    console.log("fromIframe!"); 
    } 

を、iframe内に、私はこのコードを持っていますこれは私がSenchaフォーラムで見つけた古いスレッドです:

$(".iframeToExt").click(function(){ 
    var myParent = window.parent; 
    var controller = myParent.window.Dor3.app.getController('Dor3.view.merch.MerchController'); 
    controller.onIframeCall(); 
    }); 

これは実際には機能していません。まあ、その関数をiframeから呼び出す方法はありますか?

ありがとうございます。

+1

100%ではありませんが、iFrameコールからウィンドウを削除しようとしましたか? myParent.Dor3.app.getController –

+0

奇妙な、今私は、この新しいエラーが発生します。 Application.js _dc = 20161104143508:?516キャッチされない例外TypeError:controller.doInitは、内線が応答しているので、いいです機能 ない..ですしかし... doInitは何ですか?私はそれを定義する必要がありますか? –

答えて

1

iframeから親ウィンドウにメッセージを送信し、それに応答するコードを書くことができます。例えばiframeから実行する:

window.parent.postMessage('message', '*'); 

そしてMerchControllerあなたはonmessageこのように実装することができます中:必要であれば代わりに'message'のオブジェクトを渡すことができ

window.onmessage = function(ev){ 
    if (ev.data == 'message') { 
     controller.onIframeCall(); 
    } 
}; 

注意を。 postMessageのAPI情報を確認してください。

0

単純に(appname).app.getController(コントローラのフルネーム)を使用することができます これはコントローラオブジェクト&を返します。コントローラのメソッドを呼び出すことができます。

関連する問題