【问题标题】:ExtJs4+: can calculated model field be editable?ExtJs4+:计算模型字段可以编辑吗?
【发布时间】:2014-12-11 16:51:44
【问题描述】:

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

Ext.define('My.model.Value', { 扩展:'Ext.data.Model', idProperty: 'id', 字段:[ {名称:'id',类型:'auto'}, { name: 'percentage', type: 'float' }, // 0..1 范围内的值 {名称:'percentageDecimal',类型:'float',坚持:假, 计算:函数(v){ v = v.百分比; 返回 Ext.isNumber(v) ? v * 100.0 : v; } } ] });

percentageDecimal 字段在网格中使用并且是可编辑的。

问题:如何更改我的模型以在每次更新 percentageDecimal 时自动更新 percentage 字段?

我使用 ExtJs 5.0.1。

【问题讨论】:

    标签: extjs4 extjs5


    【解决方案1】:

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

    我更喜欢另一种选择:如果您期望有足够的更新但您只想在网格中显示它,您可以从模型中删除额外的计算字段并使用dataIndex: 'percentageDecimal' 设置您的列并更改其renderer 函数随意显示(以小数形式)。

    如下:

    ... , { text: 'Percentage', dataIndex: 'percentageDecimal'
        , renderer: function (v) {
            return Ext.isNumber(v) ? v * 100.0 : v;
        }
      }
    

    【讨论】:

    • 您的解决方案很好,但我需要在网格中编辑百分比列,并且要编辑的值必须在 0..100 范围内。
    【解决方案2】:

    我使用@adaskos 的建议如下:

    Ext.define('My.model.Value', { 扩展:'Ext.data.Model', idProperty: 'id', 字段:[ {名称:'id',类型:'auto'}, { name: 'percentage', type: 'float' }, // 0..1 范围内的值 {名称:'percentageDecimal',类型:'float',坚持:假, 计算:函数(v){ v = v.百分比; 返回 Ext.isNumber(v) ? v * 100.0 : v; } } ], 设置:函数(字段名,值,选项){ if (Ext.isString(fieldName)) { // 单个字段更新 if (fieldName === 'percentageDecimal') { this.set('percentage', Ext.isNumber(value) ? 0.01 * value : value); 返回; } } 别的 { // 多个字段更新 if (Ext.isDefined(fieldName.percentageDecimal)) { var data = Ext.clone(fieldName); data.percentage = Ext.isNumber(data.percentageDecimal) ? 0.01 * data.percentageDecimal : data.percentageDecimal; 删除 data.percentageDecimal; this.set(data); 返回; } } this.callParent(参数); } });

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我看不出“依赖”配置如何提供双向更新。这个配置只是告诉 ExtJs 每次更新 'firstName'、'lastName' 时都应该更新 'name' 字段。
      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 2017-02-02
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多