0

私はかなり長い間スタックオーバーフローに潜んでいて、かなりの数の非常に役立つ答えを見つけました。コミュニティに感謝します!近いうちに、私自身の役立つ回答を提供できることを願っています。

それまでの間、私には理解できない別の問題があります。Sencha Touch を使用して Web ベースの電話アプリを作成していますが、ネストされたループを使用して JSON を反復処理するのに問題があります。最初のレベルのデータは取得できますが、その最初のレベル内にネストされたアイテムは取得できません。多少関連する ExtJS スレッドがありますが、ExtJS と Touch は微妙ではあるが重要な点で分岐しているため、独自のスレッドを作成することにしました。とにかく、ここに私がどこにいるかを示すコードがあります:

JSON (切り捨て - JSON は PHP/MYSQL で生成されたもので、現在、実際には「タイトル」を含む 3 つのサブレベルがあり、そのすべてにアクセスできます。反復できないサブレベルの「項目」です):

{
"lists": [
    {
        "title": "Groceries",
        "id": "1",
        "items": [
            {
                "text": "contact solution - COUPON",
                "listId": "1",
                "id": "4",
                "leaf": "true" 
            },
            {
                "text": "Falafel (bulk)",
                "listId": "1",
                "id": "161",
                "leaf": "true" 
            },
            {
                "text": "brita filters",
                "listId": "1",
                "id": "166",
                "leaf": "true" 
            }
        ] 
    } 
]

}

店:

var storeItms = new Ext.data.Store({
    model: 'Lists',
    proxy: {
        type: 'ajax',
        method: 'post',
        url : LIST_SRC,
        extraParams: {action: 'gtLstItms'},
        reader: {
            type: 'json',
            root: 'lists'
        }
    }
});

作業ループ:

storeItms.on('load', function(){
    var lstArr = new Array();
    storeItms.each(function(i) {
        var title = i.data.title;
        lstArr.push(i.data.title);
    });
    console.log(lstArr);
});

機能しないネストされたループ:

storeItms.on('load', function(){
    var lstArr = new Array();
    storeItms.each(function(i) {
        var title = i.data.title;
        var id = i.data.id;
        title.items.each(function(l) {
            lstArr.push(l.data.text);
        });
    });
    console.log(lstArr);
});

ネストされたループが機能しないと、「title.items.each...」に関して「undefined のメソッド 'each' を呼び出せません」というエラーが表示されます。

これは、タイトルをキーと値のペアを設定するためのキーに設定していないためだと思われるため、文字列のリストが表示されるだけです...しかし、私はちょっと途方に暮れています.

ストアには、互いに関連付けられた 2 つのモデルを介してデータが取り込まれていることに注意してください。XTemplate を介してネストされた反復を実行できるため、Store がすべてにアクセスできることはわかっています。

どんな助けも大歓迎です。うまくいけば、近いうちにコミュニティに返還されることを願っています!

-エリック

4

3 に答える 3

0

「タイトル」は列挙可能なオブジェクトではなく、文字列です。文字列を反復するには、文字列を分割して配列に変換する必要があります。

また、Ext.each を使用する代わりに、単純な for (var x in obj) {} または for (var xc in obj.prop) {} を試してください。それが機能する場合は、ext.each メソッドも同様に機能するはずですが、ext が反復できない場合オブジェクトは静かに失敗します。

于 2012-05-02T03:53:16.360 に答える
0

エリック、どうしてループ?

JSON がネストされているのと同じ方法でモデルが関連付けられている場合は、ストアで autoLoad:true を設定するだけで、座って楽しむことができます。

とにかく、他の無関係な理由でこれらの配列が必要であると仮定すると、問題は .each を試していることです

i.data.title.items

確かにあなたは繰り返しているはずです

i.data.items

また、オブジェクトがモデルの場合、データ オブジェクトの代わりに .get() を使用できます。

var title = i.get('title);
于 2011-01-28T23:38:50.410 に答える
0

新しい sencha touch 2 フレームワークを使用すると、json が返されるのとまったく同じ方法で、モデル内に関連付けを作成できます。モデルのさまざまな設定オプションを説明するSencha Touch 2 モデル ドキュメントを確認してください。ST2 Nested Listのこの例を参照できます。

お役に立てれば。

于 2012-03-31T07:47:35.270 に答える