2012-02-12 59 views
0

使用ExtJS4 Store,我想要執行一個Javascript函數來返回json數據,即。 getMyJsonData,將數據加載到商店中。ExtJS4 Ext.data.Store從函數中加載數據

function getMyJsonData() { 
    var myjson = {... }; 
    return myjson; 

} 

通過DOCO拖網,我無法找到一個方法來定義一個回調函數加載數據,所有我發現了它加載已定義的數據對象的內存中存儲。

我該如何調用一個函數呢?

Ext.define('perhoo.store.Users', 
     { 
      extend: 'Ext.data.Store', 
      model: 'perhoo.model.User', 
      autoLoad: true, 


       data : { 
       users: [ 
        { id: 1, name: 'joe44', email: '[email protected]'}, 
        { id: 2, name: 'bloggs44', email: '[email protected]'} 
        ] 
      }, 

      proxy: { 
       type: 'memory', 
       data: this.data, 
       reader: { 
        type : 'json', 
        root : 'users' 
       } 
      } 

編輯

我要調用一個函數是因爲我想執行LinkedIn API的原因。 並通過內線JSONP代理去(因爲它是跨域)使事情10X更復雜,因爲我得LinkedIn AUTH等等等等(我不知道該怎麼做還)

即 VAR MYDATA = NULL ;

function onLinkedInAuth() { 
    // Linked in api to find connections 
    IN.API.Connections("me").result(function(result) { 

     mydata = result; 
    }); 

} 
+0

你是什麼意思?你想通過ajax獲取數據嗎? – Hadas 2012-02-12 13:59:19

+0

我想調用函數的原因是因爲我想執行LinkedIn API。 並且通過Ext JSONP Proxy(因爲它跨域)使得事情變得更加複雜10倍,因爲我必須獲得LinkedIn身份驗證等等(我不知道該怎麼做) – portoalet 2012-02-12 14:28:14

+0

您是否嘗試過用戶數據:yourfunction( )或類似的東西? – Hadas 2012-02-12 14:37:05

回答

0

使用代理加載數據ExtJS4的商店,看看下面:

var myStore = Ext.create('Ext.data.Store', { 
    model: 'User', 
    proxy: { 
     type: 'ajax', 
     url : '/users.json', 
     reader: { 
      type: 'json', 
      root: 'users' 
     } 
    }, 
    autoLoad: true 
}); 

執行時,它會從url/users.json讀取數據,並存儲到自身。

另外,如果你想自己處理數據,並將它們加載到店你自己,你可以看看下面:

//this is the model we will be using in the store 
Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'name', type: 'string'}, 
     {name: 'phone', type: 'string', mapping: 'phoneNumber'} 
    ] 
}); 

//this data does not line up to our model fields - the phone field is called phoneNumber 
var data = { 
    users: [ 
     { 
      id: 1, 
      name: 'Ed Spencer', 
      phoneNumber: '555 1234' 
     }, 
     { 
      id: 2, 
      name: 'Abe Elias', 
      phoneNumber: '666 1234' 
     } 
    ] 
}; 

//note how we set the 'root' in the reader to match the data structure above 
var store = Ext.create('Ext.data.Store', { 
    autoLoad: true, 
    model: 'User', 
    data : data, 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json', 
      root: 'users' 
     } 
    } 
}); 

而且你可以很容易地使用setProxy當你想改變的行爲。

鏈接:

+0

我想調用函數的原因是因爲我想執行LinkedIn API。 並且通過Ext JSONP Proxy(因爲它跨域)使得事情變得更加複雜,因爲我必須獲得LinkedIn授權等等(我不知道該怎麼做)。 ,我不明白extjs4如何可以做到這一點,是嗎? – portoalet 2012-02-12 14:29:03

+1

@portoalet據我所知,我們可以做的是首先設置一個空的代理,當你的數據準備就緒時,使用setProxy來替換空的代理和準備好的內存代理。此外,有一個DirectProxy似乎有一個功能來完成數據請求:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.proxy.Direct – liuyanghejerry 2012-02-12 14:39:20

+0

謝謝,我遵循http://stackoverflow.com/questions/6873534/extjs4-why-when-i-use-directfn-config-in-my-store-i-need-to-specify-directcfg-m,現在它工作。 – portoalet 2012-02-12 15:29:48