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 方法?

谢谢

4

2 回答 2

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 列。

于 2013-02-25T05:38:55.243 回答
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);
        }
    }
    )
}
于 2013-02-25T06:23:28.157 回答