ExtJs4 +:可以计算模型字段是否可编辑?

时间:2014-10-16 10:45:08

标签: extjs4 extjs5

我的模型有两个数据字段:持久和计算:

Ext.define('My.model.Value', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        { name: 'id', type: 'auto' },
        { name: 'percentage', type: 'float' }, // values in 0..1 range
        { name: 'percentageDecimal', type: 'float', persist: false,
            calculate: function(v) {
                v = v.percentage;
                return Ext.isNumber(v) ? v * 100.0 : v;
            }
        }
    ]
});

percentageDecimal字段用于网格中,并且可以编辑。

问题:每次percentage更新时,如何将模型更改为自动更新percentageDecimal字段?

我使用ExtJs 5.0.1。

3 个答案:

答案 0 :(得分:2)

我使用@adaskos的建议如下:

Ext.define('My.model.Value', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        { name: 'id', type: 'auto' },
        { name: 'percentage', type: 'float' }, // values in 0..1 range
        { name: 'percentageDecimal', type: 'float', persist: false,
            calculate: function(v) {
                v = v.percentage;
                return Ext.isNumber(v) ? v * 100.0 : v;
            }
        }
    ],
    set: function (fieldName, value, options) {
        if (Ext.isString(fieldName)) {
            // single field update
            if (fieldName === 'percentageDecimal') {
                this.set('percentage', Ext.isNumber(value) ? 0.01 * value : value);
                return;
            }
        } else {
            // multiple fields update
            if (Ext.isDefined(fieldName.percentageDecimal)) {
                var data = Ext.clone(fieldName);
                data.percentage = Ext.isNumber(data.percentageDecimal) 
                  ? 0.01 * data.percentageDecimal 
                  : data.percentageDecimal;
                delete data.percentageDecimal;
                this.set(data);
                return;
            }
        }
        this.callParent(arguments);
    }
});

答案 1 :(得分:1)

我不知道他们是否在5.0.1中添加了自动执行此操作的方法,但您始终可以覆盖set方法,每当percentageDecimal发生更新时,都会重新计算{{1 }}

我更喜欢的另一种选择:如果您希望获得足够的更新,但您想要的只是在网格中显示,您可以从模型中删除额外的计算字段,并使用percentage设置列并更改其{{ 1}}函数显示它(如十进制)。

如下所示:

dataIndex: 'percentageDecimal'

答案 2 :(得分:1)

您应该使用配置选项depends自动更新! 并使用函数convert而不是calculate(不确定它是否适用于计算,我需要测试)

请参阅http://docs.sencha.com/extjs/5.1/5.1.0-apidocs/#!/api/Ext.data.field.Field-cfg-depends