2011-08-02 8 views
1

JSONを所定の形式で生成する外部ソースがあります。私はそのデータにアクセスするためにScriptTagProxyを使用する必要があります。データのフォーマットは(2レコード):ExtJSでは、jsonreaderをさまざまなjson入力フォーマット用に定義する方法はありますか?

{ 
"COLUMNS":["KEDBID","EMPID","KE","SOLUTION","ATTACH_KE","ATTACH_SOLUTION"], 
"DATA":[ 
[1,36661,"While adding a new user, if his\/her profile is missing, it could be LDAP server issue.","Contact Mr. ABC from infra team to get user's profile corrected on server","screenshots.jpg","conacts.doc"], 
[2,36661,"The error code # 123445 is trivial that may occur at particular time.","To resolve this issue, we will need to ask DBA team to refresh database. That will fix this type of errors","NA","NA"] 
] 
} 

このデータにjsonreaderを定義する方法はありますか?

UPDATE

が1より多くのケースを追加:私のJSONのようである間

{ROOT: [ {field1:data1,field2:data1},{field1:data2,field2:data2}]} 

:私が見てきたように、そのルートは次のようにする必要があります は、同様に、私たちはjsonreader用を持つことができます;

{"ROWCOUNT":8, 
"COLUMNS":["CATID","CATEGORY"], 
"DATA":{"CATID":[1,2,3,4,5,6,7,8],"CATEGORY":["Optimization","Automation","Process Improvement","Tool","Other","Another One","ThisHas'","More^[email protected]#(){}"]}} 

ここで1 - >最適化、2 - >オートメーション、3 - >プロセス改善等

基本的に私は、クエリオブジェクトをシリアル化することにより、ColdFusionのクエリオブジェクトからデータを戻す必要があります。 CF問合せの直列化は、上記の2つの形式でデータを戻すことができます。

私はまだExt Worldを新しくしています!いくつかのサポートを得ることを願っています。

よろしく、 Tushar Saxena


以下は、私が問題に直面しているコードです。データはComBoxでは利用可能なので、店頭に出ていますが、各機能や他の手段でデータを読み取ることはできません。つまり、店舗内のデータはコンポーネントにのみ供給できますか?別の例では、loadDATA()を使用して、シンプルストア(ArrayStore)で手動でデータを作成しました。

ADD()を使用してロードした後にレコードを1つ追加すると、それぞれの関数が1回実行され、追加したデータが表示されます。どうして!!!

非常に基本的なコンセプトが欠けているかもしれません。

本当に応答が良いでしょうか。

var proxy = new Ext.data.ScriptTagProxy({ 
      url: 'http://127.0.0.1:8500/extex/kebyid.cfm', 
      method: 'POST' 
     }); 

     var rec = Ext.data.Record.create([ 
      {name: 'EMPID', mapping: 1}, 
        {name: 'KE', mapping: 2}, 
        {name: 'SOLUTION', mapping: 3}, 
        {name: 'ATTACH_KE', mapping: 4}, 
        {name: 'ATTACH_SOLUTION', mapping: 5} 
     ]); 

     var myReader = new Ext.data.ArrayReader({ 
        idIndex: 0, 
        root: 'DATA' 
       }, rec); 



     var store = new Ext.data.ArrayStore({ 
       proxy: new Ext.data.HttpProxy({ 
         url: '/extex/kebyid.cfm', 
          method: 'POST' 
       }), 

       autoSave: true, 
       autoLoad: true, 
       root: 'DATA', 
       fields: [ 
        {name: 'KEID', mapping: 0}, 
        {name: 'EMPID', mapping: 1}, 
        {name: 'KE', mapping: 2}, 
        {name: 'SOLUTION', mapping: 3}, 
        {name: 'ATTACH_KE', mapping: 4}, 
        {name: 'ATTACH_SOLUTION', mapping: 5} 
       ] 
      }); 


    store.each(function(){ 
     alert('!!!!'); //**************NOT WORKING 
    }); 
    var catCB = new Ext.form.ComboBox({ 
      fieldLabel: 'Category', 
      layout:'absolute', 
      x: 100, 
      y: 5, 
      store: store, //************* DATA IS THERE AS STORE IS PROVIDING DATA TO COMBOBOX 
      emptyText:'Select Category...', 
      valueField : 'KEID', 
      displayField : 'KE', 
      hiddenName : 'category', 
      hiddenvalue : 'None', 
      mode: 'local', 
      editable : false, 
      lastQuery: '', 
      renderTo: Ext.get("d1"), 
      listeners: { 

       'beforequery': function(qe){ 
         qe.forceAll = true; 
       }} 
     }); 
+0

あなたのためのオプションがあるかどうかは分かりませんが、CFQueryReader拡張機能をチェックしてみることもできます。 (http://cfqueryreader.riaforge.org/)ExtJS 4では動作しないと思いますが、2/3で使用していてとてもうまく動作します。 – Jason

+0

こんにちはジェイソン...あなたの応答に感謝..私は確かにいくつかの点で同じを使用します。 –

答えて

1

まず、scriptTagProxyにサーバーの出力を使用することはできません。 scriptTagProxyはJSONP technologyを使用します。だから、出力は次のようになります。

callback({ 
    "COLUMNS":["KEDBID","EMPID","KE","SOLUTION","ATTACH_KE","ATTACH_SOLUTION"], 
    "DATA":[ 
    [1,36661,"While adding a new user, if his\/her profile is missing, it could be LDAP server issue.","Contact Mr. ABC from infra team to get user's profile corrected on server","screenshots.jpg","conacts.doc"], 
    [2,36661,"The error code # 123445 is trivial that may occur at particular time.","To resolve this issue, we will need to ask DBA team to refresh database. That will fix this type of errors","NA","NA"] 
    ] 
}); 

その後、単にあなたのストアとしてArrayStoreを使用しています。これは、デフォルトでArrayReader使用しています:

var store = new Ext.data.ArrayStore({ 
    proxy: new Ext.data.ScriptTagProxy({ 
     url: 'http://example.com/get_data.php' 
    }), 
    root: 'DATA', 
    fields: [ 
     'id', 
     // ..., 
     // ..., 
     // ... 
    ] 
}); 

UPDATE
私はあなたがルートプロパティとして'DATA'を使用していることを忘れてしまいました。それをストア設定に追加しました。

+0

こんにちは分子...ありがとう、あなたのための応答..私はArrayReaderを作成することができますが、私はもう一つの懸念 –

関連する問題