Javascript 如何删除ExtJS 4中字段的“name”参数

Javascript 如何删除ExtJS 4中字段的“name”参数,javascript,extjs,extjs4,extjs4.1,extjs4.2,Javascript,Extjs,Extjs4,Extjs4.1,Extjs4.2,我正在将支付提供商集成到ExtJS网站中 基本上,需要创建表单,并使用Ajax将表单字段发送给支付提供商 问题是,支付提供程序不允许表单字段具有分配给标记的名称参数。他们对实现进行手动检查,确保它不存在 我假设它是一个计数器,用于当访问者禁用Ajax,表单被提交到我的服务器时,显示信用卡。我知道这对ExtJS没有任何意义,因为如果没有打开Javascript,它将无法工作,但这是支付提供商的规则 那么,如何强制ExtJS在表单字段中不放置name参数呢?我曾尝试在字段中输入name:,但被忽略了

我正在将支付提供商集成到ExtJS网站中

基本上,需要创建表单,并使用Ajax将表单字段发送给支付提供商

问题是,支付提供程序不允许表单字段具有分配给标记的名称参数。他们对实现进行手动检查,确保它不存在

我假设它是一个计数器,用于当访问者禁用Ajax,表单被提交到我的服务器时,显示信用卡。我知道这对ExtJS没有任何意义,因为如果没有打开Javascript,它将无法工作,但这是支付提供商的规则

那么,如何强制ExtJS在表单字段中不放置name参数呢?我曾尝试在字段中输入name:,但被忽略了


我是否使用ExtJS中的模板系统来解决这个问题?

有一个非常简单的解决方案。我用Ext.form.field.Text和Ext.form.field.ComboBox对它进行了测试,它运行得很好,但我不知道它是否适用于所有表单字段,或者是否有任何负面的副作用。小心使用

Ext.define('Override.form.field.Base', {
    override: 'Ext.form.field.Base',

    getSubTplData: function(){
        var data = this.callParent(arguments);
        delete data.name;
        return data;
    }
});

基本上,它会在传递渲染数据之前从渲染数据中删除自动生成的名称。最好的部分是不涉及私有方法,因此这应该是一个稳定的解决方案。

有一个非常简单的解决方案。我用Ext.form.field.Text和Ext.form.field.ComboBox对它进行了测试,它运行得很好,但我不知道它是否适用于所有表单字段,或者是否有任何负面的副作用。小心使用

Ext.define('Override.form.field.Base', {
    override: 'Ext.form.field.Base',

    getSubTplData: function(){
        var data = this.callParent(arguments);
        delete data.name;
        return data;
    }
});

基本上,它会在传递渲染数据之前从渲染数据中删除自动生成的名称。最好的部分是没有涉及私有方法,因此这应该是一个稳定的解决方案。

因此Eric完全正确,它可以做得比修改整个模板简单得多,但对于这样的特殊情况,我会使用插件。我很快就做了一个:

Ext.define('Ext.form.field.plugin.NoNameAttribute', {
    extend: 'Ext.AbstractPlugin',
    alias: 'plugin.nonameattribute',
    init: function(cmp) {
        Ext.Function.interceptAfterCust(cmp, "getSubTplData", function(data){
            delete data['name'];
            return data;
        });
    }
});
注意,使用的方法interceptAfterCust是我的一个自定义方法,它通过将原始方法的结果作为参数传递给拦截方法来修改现有方法。它还使用给定的原始对象,该对象可以作为范围作为原始方法的范围。最简单的方法是将这些方法添加到Ext.函数中


这里有一个例子,第一个字段在dom上没有name属性,即使它存在于组件中。

因此Eric完全正确,它可以做得比修改整个模板简单得多,但对于这种特殊情况,我会使用插件。我很快就做了一个:

Ext.define('Ext.form.field.plugin.NoNameAttribute', {
    extend: 'Ext.AbstractPlugin',
    alias: 'plugin.nonameattribute',
    init: function(cmp) {
        Ext.Function.interceptAfterCust(cmp, "getSubTplData", function(data){
            delete data['name'];
            return data;
        });
    }
});
注意,使用的方法interceptAfterCust是我的一个自定义方法,它通过将原始方法的结果作为参数传递给拦截方法来修改现有方法。它还使用给定的原始对象,该对象可以作为范围作为原始方法的范围。最简单的方法是将这些方法添加到Ext.函数中


下面是一个示例,其中第一个字段在dom上没有name属性,即使它存在于组件中。

我更喜欢在字段配置选项中这样:

submitValue: false

自ExtJS 3.4开始提供,我更喜欢字段配置选项:

submitValue: false

从ExtJS 3.4开始提供

您的问题需要改进,您使用的代码在哪里?它创建的输出是什么?没有代码的问题不适合这样做。这是一个非常奇怪的规则。您可以使用DOM查询来查找DOM元素并将其操作到您的核心内容。您可以在渲染后侦听器中执行此操作。但是ExtJS如何在表单字段没有名称的情况下提交数据???修改该字段的字段模板以省去name属性,但这将使提交变得不可能。不管怎样,这就是你想要的解决方案。@sra:是的,我就是这么想的。您是否有一个示例代码,看起来如何?Extjs无论如何都不会提交表单,所以这很好:支付提供商提供的javascript正在基于id读取表单值,并进行手动ajax调用。不需要提交表格。@JuanMendes:你为什么否决我的问题?显然有几个人很好地理解了我的问题。你的问题需要改进,你正在使用的代码在哪里?它创建的输出是什么?没有代码的问题不适合这样做。这是一个非常奇怪的规则。您可以使用DOM查询来查找DOM元素并将其操作到您的核心内容。您可以在渲染后侦听器中执行此操作。但是ExtJS如何在表单字段没有名称的情况下提交数据???修改该字段的字段模板以省去name属性,但这将使提交变得不可能。不管怎样,这就是你想要的解决方案。@sra:是的,我就是这么想的。您是否有一个示例代码,看起来如何?Extjs无论如何都不会提交表单,所以这很好:我是由payment provid提供的javascript
er正在根据ID读取表单值,并进行手动ajax调用。不需要提交表格。@JuanMendes:你为什么否决我的问题?显然,有几个人很好地理解了我的要求。但这难道不会覆盖整个应用程序中的所有表单元素吗?我只想在具体的付款单上这样做。有没有一种方法可以仅将其应用于特定字段,而不制作插件?我试着将getSubTplData直接放在一个字段上,但这不起作用。但这不会覆盖整个应用程序中的所有表单元素吗?我只想在具体的付款单上这样做。有没有一种方法可以仅将其应用于特定字段,而不制作插件?我试着将getSubTplData直接放在一个字段上,但没有成功。很好的解决方案。谢谢:很好的解决方案。谢谢: