如何覆盖Ext.form.Action.Submit上的默认配置选项?

时间:2011-02-16 08:40:27

标签: extjs

有没有办法配置ExtJS(通过Ext.override?),以便Ext.form.Action.Submit的submitEmptyText配置选项默认为false而不是true?

我知道可以覆盖类上的方法,但我不知道默认配置属性,有人可能会认为,因为配置选项主要是公共属性,控制台记录Ext.form.Action.Submit.submitEmptyText将输出false但它未定义。

我成功的一种方法是为run方法创建一个拦截器但基本上渲染submitEmptyText配置选项是无用的,因为它不能再通过传递给构造函数的配置对象进行设置。

Ext.form.Action.Submit.prototype.run = Ext.form.Action.Submit.prototype.run.createInterceptor(function() {
    this.options.submitEmptyText = false;
});

5 个答案:

答案 0 :(得分:8)

[编辑了几次,但这对我有用]

submitEmptyText实际上不是Ext.form.Action.Submit原型的属性 - 它只是在run函数中检查为“this.options”对象的属性 - 它本身是在超类上定义的, Ext.form.Action

如果你希望默认情况下它是全局假的,那么只需在构造它之后在Ext.form.Action的options属性上设置它

Ext.form.Action.prototype.constructor = Ext.form.Action.prototype.constructor.createSequence(function() {
    Ext.applyIf(this.options, {
        submitEmptyText:false
    });
});

这很棘手,因为Ext.form.Action将this.options设置为其构造函数中的空对象,因此在构造函数执行后必须访问该options属性,这就是createSequence在这种情况下工作的原因。

答案 1 :(得分:3)

如果要覆盖所有实例的Ext.form.Action.submit(),为什么不使用Ext.override?

Ext.override(Ext.form.Action.submit, { 
    submitEmptyText: false
});

答案 2 :(得分:1)

如果您希望 Ext.form.Action.submit 中的 submitEmptyText 为false,则只需在创建 Ext.form时将其设置在配置中.Action.submit 对象。

var submit = Ext.form.Action.submit({
    submitEmptyText: false
});

答案 3 :(得分:0)

使用覆盖是非常大胆的,但是如果你能够以正确的方式管理改变:

Ext.override ( Ext.form.Action.submit, {
   submitEmptyText: false
}); 

如果需要,它会将此设置反转为true。我还建议阅读http://edspencer.net/2009/07/extoverride-monkey-patching-ext-js.html

答案 4 :(得分:0)

也许:

Ext.form.Action.submit.prototype.submitEmptyText = false.

这有助于我:

Ext.Window.prototype.constrainHeader = true;
相关问题