2011-12-19 10 views
1

こんにちは、私は誰かがこれで私を助けてくれることを願っています。私は本当に立ち往生していますが、それはすでに答えられています。投稿はできますが、まだそれを動作させることはできません。Sencha Touch 1.1.1ネストされたJSONストアのロード

私はSencha Touch 1.1.1を使用しています。このストアにネストされたJSONデータがロードされるようにしてください。コードHere's:

Ext.regModel("UserData", { 

     hasMany : [{ 
      name : "id", 
      type : "integer", 
     },{ 
      name : "username", 
      type : "string", 
     },{ 
      name : "password", 
      type : "string", 
     }] 

    }); 

    var userdata = 
     {"users": [ 
        { 
         "id": 16, 
         "username": "[email protected]", 
         "password": "bla", 
        }, { 
         "id": 17, 
         "username": "[email protected]", 
         "password": "bla", 
        } 
       ] 
     }; 


    var myStore = new Ext.data.Store({ 

     model : 'UserData', 
     data : userdata, 
     proxy : { 
      type : 'ajax',    

      reader : { 
       type : 'json', 
       root : 'users'  // not working   
      } 
     } 

    }); 

    var myList = new Ext.List ({ 

     fullscreen : true, 
     store : myStore, 
     grouped : false, 
     itemTpl : '<div>{username}</div>' 

    }); 

がキャッチされないタイプエラーを返します:引数リストが間違った型を持っています。 JSONを外側のArrayラッパーで書き直すと、それはうまく動作しますが、間違ったルート(ユーザーではありません)を使って、これがroot: ''の値で動作する例を確かに見つけました。

var userdata = 
    [ {"users": [ 
       { 
        "id": 16, 
        "username": "[email protected]", 
        "password": "bla", 
       }, { 
        "id": 17, 
        "username": "[email protected]", 
        "password": "bla", 
       } 
      ] 
    } ]; 

何が欠けていますか?

答えて

0

私が誤解していない場合、「UserData」モデルではhasManyではなくfieldsである必要があります。

そして、jsonデータを別のjsonファイルに入れて、ストアのプロキシでパスを探してみてください。

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

私はそれをテストしました。ここでうまくいきます。ここに私のフルコードです。

Ext.regModel("UserData", { 

    fields: [ 
      {name: 'id', type:'int'}, 
      {name: 'username', type:'string'}, 
      {name: 'password', type:'string'} 

    ] 
}); 


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


var app = new Ext.Application({ 
    name: 'TestApp', 
    useLoadMask: true, 
    launch: function() { 


     TestApp.views.listToolbar = new Ext.Toolbar({ 
      title: 'Foo Bar', 
      layout: 'hbox' 
     }); 

     TestApp.views.list = new Ext.List({ 
      id: 'list', 
      store: myStore, 
      emptyText: 'Nothing', 
      itemTpl: '<div class="username">{username}</div>', 
     }); 

     TestApp.views.container = new Ext.Panel({ 
      layout: 'fit', 
      html: 'this is the container', 
      dockedItems: [TestApp.views.listToolbar], 
      items: [TestApp.views.list] 
     }); 

     TestApp.views.viewport = new Ext.Panel({ 
      fullscreen: true, 
      layout: 'card', 
      cardAnimation: 'slide', 
      items: [ 
       TestApp.views.container 
      ] 
     }); 
    } 
}); 
+0

ああ、ありがとう、魅力的な作品です。好奇心のために、JSON Stringを変数に入れて店に渡すことができない理由を知っていますか? Senchaのデータストアは私にとって大きな謎のようです。 – user1106418

+0

JSON Stringを変数に入れることができます。あなたのルートは 'users'なので、変数は' var mydata = [{"id":16、 "username": "blah"、 "password": "spamme1992"}、{"id":17 "ユーザー名: "xxx"、 "パスワード": "yyy"}]; ' –

+0

ああ、助けてくれてありがとうございます。 – user1106418

関連する問題