如何在Sencha模板中调用模型函数

时间:2013-02-25 05:32:14

标签: function templates extjs

我的客户端模型定义为:

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

由于

2 个答案:

答案 0 :(得分: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列。

答案 1 :(得分: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);
        }
    }
    )
}