2013-05-14 37 views
0

我有一個網格彈出一個編輯窗體與組合框。在顯示視圖之前,我加載了組合框存儲。然後我使用form.loadRecord(record);來設置表單的值。這會加載主記錄。但是,如何加載綁定到組合框的關聯數據值,以便正確設置組合框的值。如何使用嵌套數據從網格設置窗體上的combox值? Extjs 4.2 Mvc

  1. 我知道我可以手動使用的setValue,但我想我想可以通過負載的形式來處理。

  2. 如果我的表單有3個字段,可以說firstName lastName,然後是ContactType的組合框。 firstName和lastName在我的主記錄中,ContactType是關聯的記錄。如果我在字段lastName或firstName中更改值,則檢測到更改並且記錄被標記爲髒。如果我更改組合框值,記錄不會被標記爲髒。我猜測是因爲它們是兩種不同的模型。如何製作一張唱片。我認爲有一個組合框的值從一個網格中的記錄設置是常見的,但我找不到任何最好的方法來實現這一點的例子。

這是一些代碼。

我的json看起來像這樣。主要戰績有名姓hasOne相關的記錄是ContactType

{ 
    "__ENTITIES":[ 
     { 
     "__KEY":"289", 
     "__STAMP":12, 
     "ID":289, 
     "firstName":"a", 
     "middleName":"", 
     "lastName":"asd", 
     "ContactType":{ 
      "__KEY":"2", 
      "__STAMP":4, 
      "ID":2, 
      "name":"Home" 
     } 
     } 
    ] 
} 

控制列表功能,編輯功能和updatefunction,大火被點擊網格行時

list: function() { 
     var mystore = this.getStore('Contacts') 
     mystore.proxy.extraParams = { $expand: 'ContactType'}; 
     mystore.load({ 
     params: { 
     }, 
     callback: function(r,options,success) { 
    //  debugger; 
     } //callback 
    }); //store.load 

     editContact: function (grid, record) {  
     //load store for combobox 
     var store = this.getStore('ContactTypes'); 
     store.load({ 
      params: { 
      }, 
      callback: function(r,options,success) { 
     // debugger; 
      } //callback 
     }); //store.load 

     var view = Ext.widget('contactsedit'); 
     var form = view.down('form') 
     //load primary record 
     form.loadRecord(record); 
     //load associated record 
     form.loadRecord(record.getContactType()); 

updateContact: function (button) { 
    var win = button.up('window'), 
     form = win.down('form'), 
     record = form.getRecord(), 
     values = form.getValues(), 
     store = this.getStore('Contacts') 
    if (form.getForm().isValid()) { 
     if (this.addnew == true) { 
      store.add(values); 
     } else { 
      record.set(values); 
     } 
     store.sync(); 
     win.close(); 
    } 
} 

loadRecord(record.getContactType)是消氣劑相關數據。我能夠獲得關聯的數據,但不知道如何使它在組合框中設置值,或者如何讓它作爲一個記錄並自動檢測更改。

我的聯繫人型號

Ext.define('SimplyFundraising.model.Contact', { 
    extend : 'Wakanda.model', 
    requires:[ 
     'SimplyFundraising.model.ContactType' 
    ], 
    fields: ['firstName', 'middleName','lastName','ContactType.name'], 
    associations: [ 
     { 
      type: 'hasOne', 
      model: 'SimplyFundraising.model.ContactType', 
      name: 'ContactTypes', 
      getterName: 'getContactType', 
      associationKey: 'ContactType' 

     } 
    ] 
}); 

ContactType模型

Ext.define('SimplyFundraising.model.ContactType', { 
    extend : 'Wakanda.model', 
    fields: ['__KEY','name',] 
}); 
  1. 這是設置在嵌套數據形式的組合框的值的正確方法?

  2. 我是否應該不使用關聯,並將所有字段放入我的聯繫人模型中,即將所有ContactType字段添加到聯繫人模型,然後數據應該位於同一記錄中,並且更改跟蹤將會起作用。但這似乎與MVC模式相反,並與組織原因相反。

你們如何處理這種情況,任何例子都會很棒!

感謝, 丹

回答

0

如果你的形式加載正確的價值觀,那麼所有你需要做的是這樣的:

Extjs4, How to set displayField in combo editor?

+0

感謝您的建議。我知道第一個form.loadRecord(record);正在工作的形式值是顯示,但我不知道如果第二個form.loadRecord(記錄。getContactType());正在工作,你怎麼看?根據我的理解,當我使用第二個form.load時,數據__KEY應該與組合框數據__KEY匹配並設置值。由於前2個字段爲1個商店,並且組合框是另一個商店,因此還存在更改跟蹤問題。謝謝 – dan 2013-05-14 22:27:05

+0

我不認爲你想調用loadRecord()兩次。調用一次,運行後,設置組合初始值。 – 2013-05-14 22:37:31

+0

我照你的建議做了。這確實有效,但它非常手動,似乎是錯誤的。但好的,下一個主要關注點是更改跟蹤。形式負載和組合框的值後是否設置正確,如果我改變組合框的值,然後點擊保存,什麼都不會發生,因爲形式是依賴於主存儲,它不認爲任何領域都是髒form.loadRecord(記錄); VAR的myKey = record.getContactType()。數據.__ KEY combo.setValue(的myKey) – dan 2013-05-14 22:40:59