2016-11-04 49 views
1

好天好,我打這個簡單的問題調用ExtJS的家長控制功能,我需要你的意見一次:從I幀

我編輯一個ExtJS的應用程序(我沒有做)。 在本申請中,存在在某一時刻的iframe中,調用外部HTML文件,其定義:

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

我需要調用在FROM的IFRAME視圖控制器定義的函數,將有幾個功能是調用,現在我已經設置好的了一個簡單的測試案例,所以我創建的視圖文件的控制器,具有類似下面的iframe:

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遺漏的類型錯誤:controller.doInit不是一個函數 這是很好的,因爲分機接聽..但是... doInit是什麼?我必須定義它嗎? –

回答

1

您可以從iframe發送消息到父窗口並編寫響應它的代碼。例如從iframe執行:

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

而且在MerchController可以實現onmessage這樣的:

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

注意,代替'message',如果你需要,你可以傳遞一個對象。檢查API信息postMessage

0

您可以簡單地使用(appname).app.getController(控制器的全名) 這將返回控制器對象&您可以調用該控制器的方法。