【问题标题】:How to Set Single Field Dirty in ExtJS如何在 ExtJS 中设置单个字段脏
【发布时间】:2015-09-10 22:35:07
【问题描述】:

问题:我们在表单上切换字段。当显示 secondField 而不是 firstField 时,表单会发生变化。但是 secondField 仍然被标记为不脏,因为两个字段都保持不变。显示 secondField 应该总是使它和表单(模型)变脏。

研究:setDirty() 方法在整个记录上完成,setValue() 的行为符合预期,但闻起来像 hack,不能用于各种字段类型(文本字段、组合框)。

问题:如何手动设置单个表单字段状态更改以调用保存其数据?

【问题讨论】:

    标签: extjs save field


    【解决方案1】:

    您将数据状态与表单可视化混为一谈。默认情况下,“显示字段”与数据无关,因此您需要显式创建一个。这可以通过在切换时更改某些数据来完成,或者通过其他方式来完成 - 在更改数据时切换。

    例如,在选中/取消选中表示表单数据的复选框字段时可能会发生切换(另请参阅fiddle):

    Ext.create('Ext.form.Panel', {
        viewModel: {
            type: 'default'
        },
        items: [
            {
                xtype: 'checkbox',
                reference: 'toggle',
                itemId: 'toggle',
                boxLabel: 'Toggle',
                hidden: true
            },
            {
                xtype: 'button',
                text: 'Toggle',
                enableToggle: true,
                toggleHandler: function() {
                    var form = this.up('form'),
                        checkbox = form.child('#toggle');
                    checkbox.setValue(!checkbox.getValue());
                    console.log(form.isDirty() ? 'Dirty!' : 'Not dirty');
                }
            },
            {
                xtype: 'textfield',
                name: 'firstField',
                fieldLabel: 'First Field',
                bind: {
                    hidden: '{toggle.checked}'
                }
            },
            {
                xtype: 'textfield',
                name: 'secondField',
                fieldLabel: 'Second Field',
                bind: {
                    hidden: '{!toggle.checked}'
                }
            }
        ],
        renderTo: Ext.getBody()
    });
    

    【讨论】:

    • 感谢您的努力。我认为这个问题有点被误解了。给出了两个字段及其 Ext.data.Model 基础。我们需要在切换时操作它的 isDirty 属性。您的示例实际上只重现了切换。
    • 好吧,既然你使用了“smells like a hack”这个短语,我认为你是在采用正确的方法。正确的方法是接受字段/模型的dirty 标志仅在数据发生实际变化时设置(这是由幕后的 ExtJS 为您完成的)。现在,您想要的只是因为您在不更改数据的情况下切换(有效地更改了可见性)某些字段而使其保存数据。不要指望它会同时起作用并成为正确的方法。相反,将切换与更改某些数据(例如切换状态)结合使用,就像我上面展示的那样。
    • 带有切换处理程序的隐藏复选框是一种解决方案。
    猜你喜欢
    • 2013-02-02
    • 2014-04-23
    • 2019-06-19
    • 1970-01-01
    • 2011-05-05
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多