紧急求助!!ExtJS Xtemplate的问题

八一 2012-12-21 03:59:33
我想在我的ExtJS项目里加入对soap协议的支持,于是我复制了官网上的proxy和reader,在自定义proxy的时候发现一个问题。官网上是有Xtemplate类来构造SOAP请求的XML的,但是我调试的时候发现没有成功构造Xml,整个构造过程只完成了一点。下面我贴一下代码,请大家看一下该怎么改

下面的envelopeTpl 是用来构造soap envelope的
readBodyTpl是用来构造Read操作的soap body的,
writeBodyTpl是用来构造create,delete,update操作的soap body的

他调试的时候发现构造出来的xmlData只有这一点点:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

soap body的构造没有执行,请问为什么?怎么改?


来个人我给分!
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yibey 2012-12-24
  • 打赏
  • 举报
回复
恭喜下楼主了
八一 2012-12-24
  • 打赏
  • 举报
回复
找到问题了,是因为我用的是4.1.1的SDK,但是我下载的Proxy和Reader是4.1.3的,我用4.1.3的XTempalteCompiler就行了
八一 2012-12-24
  • 打赏
  • 举报
回复
没人帮下我吗?
八一 2012-12-21
  • 打赏
  • 举报
回复
Ext.define('Ext.data.soap.Proxy', {
    extend: 'Ext.data.proxy.Ajax',
    alias: 'proxy.soap',

    requires: [
        'Ext.data.soap.Reader'
    ],
    operationParam: 'op',
reader: 'soap',
envelopeTpl: [
        '<?xml version="1.0" encoding="utf-8" ?>',
        '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">',
            '{[values.bodyTpl.apply(values)]}',
        '</soap:Envelope>'
    ],
readBodyTpl: [
        '<soap:Body>',
            '<{operation} xmlns="{targetNamespace}">',
                '<tpl foreach="params">',
                    '<{$}>{.}</{$}>',
                '</tpl>',
            '</{operation}>',
        '</soap:Body>'
    ],
writeBodyTpl: [
        '<soap:Body>',
            '<{operation} xmlns="{targetNamespace}">',
                '<tpl for="records">',
                    '{% var recordName=values.modelName.split(".").pop(); %}',
                    '<{[recordName]}>',
                        '<tpl for="fields">',
                            '<{name}>{[parent.get(values.name)]}</{name}>',
                        '</tpl>',
                    '</{[recordName]}>',
                '</tpl>',
            '</{operation}>',
        '</soap:Body>'
    ],
constructor: function(config) {
        this.callParent(arguments);
        this.api = config.api || {};
        this.soapAction = config.soapAction || {};
    },

    doRequest: function(operation, callback, scope) {
        var me = this,
            XTemplate = Ext.XTemplate,
            action = operation.action,
            soapOperation = me.api[action],
            params = Ext.applyIf(operation.params || {}, me.extraParams || {}),
            bodyTplName = action + 'BodyTpl',
            xmlData = XTemplate.getTpl(me, 'envelopeTpl').apply({
                operation: soapOperation,
                targetNamespace: me.targetNamespace,
                params: params,
                records: operation.records,
                bodyTpl: XTemplate.getTpl(me, me[bodyTplName] ? bodyTplName : 'writeBodyTpl')
            }),
            request = new Ext.data.Request({
                url: me.url + '?' + me.operationParam + '=' + soapOperation,
                method: 'POST',
                action: action,
                operation: operation,
                xmlData: xmlData,
                headers: Ext.apply({
                    SOAPAction: me.soapAction[action]
                }, me.headers),
                timeout: me.timeout,
                scope: me,
                disableCaching: false // explicitly set it to false, ServerProxy handles caching
            });

        request.callback = request.callback = function(response,opts){
                	console.log(action);
                	console.log(soapOperation);
                	console.log(params); 
                	console.log(bodyTplName);
                	console.log(xmlData);
                	console.log(me[bodyTplName]);
                };//me.createRequestCallback(request, operation, callback, scope);

        Ext.Ajax.request(request);
                
        return request;
    }
});

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧