2013-02-25 39 views
0

我有一個客戶端模型定義爲:如何調用煎茶模板的模型功能

Ext.define('app.model.Client', { 
    extend: 'Ext.data.Model', 
    alias: 'model.clientmodel', 
    fields: [ 
     { 
      name: 'Firstname', 
      type: 'string' 
     }, 
     { 
      name: 'Lastname', 
      type: 'string' 
     }, 
     { 
      name: 'Title', 
      type: 'string' 
     } 
    ], 
    GetFullName: function(withTitle) { 
     var fullName = [this.get('Firstname'), this.get('Lastname')].join(' '); 

     if(withTitle){ 
      return [this.get('Title'), fullName].join(' '); 
     } 

     return fullName; 
    } 
}); 

在網格中,我希望有一個「全名」模板列 - 有沒有辦法來調用GetFullName方法在我的模型中定義?

感謝

回答

1

我想出的解決方案是使用模板函數來獲取客戶端數據的引用,並通過它調用GetFullName。

我想能夠把它變成一個可重用的類,但我不知道如何獲得對網格的引用(因爲它不會總是在MyGrid上)。

{ 
    xtype: 'templatecolumn', 
    dataIndex: 'Lastname', 
    text: 'Name', 
    tpl: new Ext.XTemplate('{[this.getFullName(values.ID)]}', 
    { 
     getFullName: function (clientId) { 
      var myGrid = Ext.getCmp('MyGrid'), 
      myStore = myGrid.getStore(), 
      client = myStore.getById(clientId); 

      return client.GetFullName(true); 
     } 
    } 
    ) 
} 
+1

如果您沒有商店,這將無法正常工作,但我想您可能確實有商店,否則只需在模型實例上調用該函數即可。如果您使用視圖,只需將myGrid與視圖交換並更改組件查詢。 – 2013-02-25 09:07:58

1

您可以使用轉換就像下面的代碼

Ext.define('app.model.Client', { 
extend: 'Ext.data.Model', 
alias: 'model.clientmodel', 
fields: [ 
    { 
     name: 'Firstname', 
     type: 'string' 
    }, 
    { 
     name: 'Lastname', 
     type: 'string' 
    }, 
    { 
     name: 'Title', 
     type: 'string' 
    }, 
    { 
     name: 'FullName', 
     type: 'string', 
     convert: function(value,record) { 
      var fullName = [record.get('Firstname'), record.get('Lastname')].join(' '); 

      if(withTitle){ 
       return [record.get('Title'), fullName].join(' '); 
      } 

      return fullName; 
     } 
    } 

] 

});

現在您可以在網格dataIndex中使用FullName列。

+0

謝謝,這工作 - 除了withTitle部分 - 我猜這是不可能的這種方法? – Brett 2013-02-25 06:15:58

+0

不,您將無法在此處傳遞參數和標題。你必須使用另一種方法,就像其他答案一樣。 – 2013-02-25 09:06:11