如何删除 ExtJS 4 中字段的“名称”参数
Posted
技术标签:
【中文标题】如何删除 ExtJS 4 中字段的“名称”参数【英文标题】:How to remove the "name" param in for fields in ExtJS 4 【发布时间】:2013-07-22 17:28:00 【问题描述】:我正在将支付提供商集成到 ExtJS 网站中。
基本上,需要创建一个表单,然后使用 Ajax 将表单字段发送给支付提供商。
问题在于支付提供商不允许表单字段具有分配给“”标签的“名称”参数。他们对实现进行手动检查,并确保它不存在。
我认为当访问者禁用 Ajax 并且表单被提交到我的服务器时,我认为这是一种反措施,从而显示信用卡。我知道这对 ExtJS 没有任何意义,因为如果没有打开 javascript,它就无法工作,但无论如何,这是支付提供商的规则。
那么,我怎样才能强制 ExtJS 不在表单字段中放置“名称”参数?我尝试将“名称:''”放入字段中,但这被忽略了。
我是否使用 ExtJS 中的模板系统来解决这个问题?
【问题讨论】:
您的问题需要改进,您使用的代码在哪里?它创建的输出是什么?没有代码的问题不适合 SO。 这是一个很奇怪的规则。您可以使用 DOM 查询来查找和操作您的 DOM 元素到您的心脏内容。您可以在渲染后的侦听器中执行此操作。但是ExtJS如何提交没有名字的表单域的数据??? 修改此字段的字段模板以省略 name 属性,但这会使提交无法提交 AFAIK。无论如何,这就是您正在寻找的解决方案。 @sra:是的,我就是这么想的。你有一个示例代码吗? Extjs 无论如何都不会提交表单,所以这一切都很好:) 支付提供商提供的 javascript 正在读取基于 ID 的表单值并进行手动 ajax 调用。无需提交表单。 @JuanMendes:你为什么不赞成我的问题?显然,有几个人都明白我在问什么。 【参考方案1】:所以 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.Function
Ext.Function.interceptAfterCust = function(object, methodName, fn, scope)
var method = object[methodName] || Ext.emptyFn;
return (object[methodName] = function()
return fn.call(scope || this, method.apply(object, arguments));
);
这是一个working JSFiddle,其中第一个字段不会在 dom 上具有 name 属性,即使它存在于组件中。
【讨论】:
不错的解决方案。谢谢:)【参考方案2】:对此有一个非常简单的解决方案。我用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;
);
基本上,它会在传递之前从渲染数据中删除自动生成的名称。最好的部分是不涉及私有方法,所以这应该是一个稳定的解决方案。
【讨论】:
但这不会覆盖整个应用程序中的所有表单元素吗?我只想在特定的付款表单上执行此操作。有没有办法将其仅应用于特定领域,而不需要制作插件?我尝试将“getSubTplData”直接放在字段上,但没有奏效。【参考方案3】:我更喜欢在字段配置选项中使用这个:
submitValue: false
自 ExtJS 3.4 起可用
【讨论】:
以上是关于如何删除 ExtJS 4 中字段的“名称”参数的主要内容,如果未能解决你的问题,请参考以下文章
ExtJS 4 - 如何加载带有来自表单的最新值的参数的网格存储?
使用行编辑器进行编辑时,如何在 extjs 4.1.1 中禁用行的特定单元格?