我正在将付款服务提供商集成到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/

10-12 12:20
查看更多