我正在将付款服务提供商集成到ExtJS网站中。
基本上,需要创建一个表单,然后使用Ajax将表单字段发送给付款提供商。
问题是付款提供商不允许表单字段具有分配给“”标签的“名称”参数。他们对实现进行手动检查,并确保不存在该实现。
我认为这是对访客的禁止措施,即当访客禁用了Ajax并且表单被提交到我的服务器时才显示信用卡。我知道使用ExtJS没有任何意义,因为如果不打开Javascript,它将无法正常工作,但尽管如此,这是付款提供商的规则。
因此,如何强制ExtJS不要在表单字段中放置“名称”参数?我尝试将“ name:”放入字段中,但是被忽略了。
我是否使用ExtJS中的模板系统解决此问题?
最佳答案
因此,埃里克(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属性。
关于javascript - 如何在ExtJS 4中的字段中删除“名称”参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17793712/