2014-07-22 45 views
0

首先,我是一個extjs初學者。我無法使用ajax代理加載我的商店。EXT JS異步獲取json數據並使用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; 
     }}] 
    }); 

Attemping加載店

 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') 
    }); 

回答

0

有幾件事情我在店裏發現:

  • 自動加載必須在存儲級別,而不是內部的代理:.
  • 監聽器需要位於代理之外:
  • 方法:需要在代理內部:.

另外,我不確定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'); 
     } 
    } 
});