EXT JS异步获取json数据并使用ajax代理加载存储

时间:2014-07-22 22:27:29

标签: ajax json extjs asynchronous get

首先,我是一个extjs初学者。我无法使用ajax代理加载我的商店。

这是我的模特。

        Ext.define('alertTemplates', {
        extend: 'Ext.data.Model',
        fields: ['text','config', {name: 'label', convert: function(v,record) {
            if (Ext.isEmpty(record.data.text))
                return nodeTemplate.apply(record.data.config);
            else return record.data.text;
        }}]
    });

试图加载商店

        var store = Ext.create('Ext.data.TreeStore', {
        model: 'alertTemplates',
        proxy:{
            type: 'ajax',
            url: '/alfresco/service/alertTemplates.json?alf_ticket=' + user.authTicket,
            reader:{
                root:'children',
                type: 'json'
            },
            autoLoad: true,
            excludeContext: true,
            method: 'GET',
            params: {
                nodeRef: currentProject.nodeRef
            },
            scope: this,
            listeners: {
                load: function(){
                    console.log('loaded');
                }
            }
        }
    });

    store.load();

我知道我正在检索数据。我之前使用过以下代码,响应中包含了我想要的json代码。我是以正确的方式接近这个吗?

        Jx.Utils.ajax({
        url: '/alfresco/service/alertTemplates.json?alf_ticket=' + user.authTicket,
        excludeContext: true,
        method: 'GET',
        params: {
            nodeRef: currentProject.nodeRef
        },
        scope: this,
        success: function (response)
        {
            var alertTemplates = response.json;
            console.log(alertTemplates);

            store.loadRawData(alertTemplates,true);

        },
        failure:  console.log('failed')
    });

1 个答案:

答案 0 :(得分:0)

我在商店里注意到的一些事情:

  • autoLoad需要位于商店级别,而不是代理内部:。
  • 监听器需要在代理之外:。
  • 方法:需要在代理内部:。

另外,我不确定excludeContext是什么。您使用的是哪个版本的EXTJS?

这里有一些重新组织给你一个想法。如果autoLoad为true,则无需手动加载。

var store = Ext.create('Ext.data.TreeStore', {
    model: 'alertTemplates',
    autoLoad: true,
    proxy:{
        type: 'ajax',
        url: '/alfresco/service/alertTemplates.json?alf_ticket=' + user.authTicket,
        method: 'GET',
        reader:{
            root:'children',
            type: 'json'
        },
        //excludeContext: true,
        params: {
        nodeRef: currentProject.nodeRef
        }
    },
    scope: this,
    listeners: {
        load: function(){
            console.log('loaded');
        }
    }
});