2013-06-11 68 views
2

我有一個窗體,在其中佈置一個窗體(第一個選項卡)和數據視圖(第二個選項卡)的tabpanel。此窗口可能會從網格中打開(例如雙擊)。這些2個標籤描述:傳遞一個對象ID到一個ExtJS窗口

  • TAB1:爲對象的數據(比方說,一個CA)
  • TAB2:同一對象的圖像。

這兩個組件(數據視圖和表單)中的每一個都有自己的存儲(DirectStore)。這兩個商店都有一個發送到服務器的參數,以便知道誰的字段值或誰的圖像被返回。

我的問題是:

  1. 我怎麼傳遞對象ID從電網到窗口
  2. 我怎麼傳遞對象ID標籤的部件,以加載 正確的數據。
  3. 從哪裏做我打電話加載上述商店?

信息:

  • 我的問題也與最佳實踐,很好的方式。這將用於MVC應用程序。
  • 我的窗口必須從直接呼叫中獲取所有數據。

回答

0

我假設你已經創建了自己的窗口類,它關心在其initComponent方法中創建選項卡。由於你的窗口代表一個特定的對象(即來自網格行的一條記錄),所以當你創建它時,將整個記錄或者只是它的id傳遞給窗口是有意義的。 您可以設置您的網格狀的事件處理程序:

var openObjectWindow = function(view, record) { 
    Ext.create('YourWindowClass', { 
     objectId: record.getId() 
    }) 
}; 
grid.on('itemdblclick', openObjectWindow); 

當你達到在聲明選項卡,爲窗口的initComponent,你通過objectId給他們以類似的方式(假設你的標籤類已經被定義):

this.defaults = { 
    objectId: this.objectId 
} 
this.items = [ 
    { 
     xtype: 'mydatatab' 
    }, 
    { 
     xtype: 'myimagestab' 
    } 
] 

最後,你應該設置你的店在創建時(autoLoad: true)自動加載,提供了存儲與他們的標籤一起創建時,被渲染。

+0

你的假設是正確的。我在哪裏通過對象是商店? – catalinux

+0

將對象傳遞給商店很簡單:假設商店是在你的標籤「initComponent」中創建的,你只需通過商店配置傳遞'objectId:this.objectId'。最棘手的部分是如何讓商店將objectId傳遞給服務器。查看'Ext.data.AbstractStore'中的'load'方法。你會看到它準備'選項'通過代理髮送。你需要將'objectId'應用於這些'options'。其中一種方法是擴展'Ext.data.Store'並編寫自己的'load'方法。 – Greendrake

+0

或者,您可以在標籤initComponent中執行'store.load({objectId:this.objectId})',但是在這種情況下關閉存儲自動加載。 – Greendrake

相關問題