2011-06-24 25 views
0

なぜこれが起きているのか理解しようとしています。私が抱えている問題は、StoreがRestProxyを通じてロードされたモデルであるListを持つPanelを持つアプリケーションをロードすると、リストが空であるように見えるということです。表示される行の1つに触れるまではありません。表示するには、各行をタッチする必要があります(別のタブに切り替えることもできます)。私は、サーバーがJSONデータをどれくらい早く送信するかとは関係があるように、これを絞り込んだ。サーバーが高速に応答すると、この問題は発生しません(データがダウンロードされた後にリストの '描画'が発生すると思います)。AJAXの応答が遅い場合は、リスト行が表示されません。

JSONを送信する前にサーバーに遅れを追加すると(3秒間)、問題が発生します。レイアウトを削除すると{type: 'card'}、それも正しくレンダリングされることに気付きました。実際にはTabControlの一部であるため、実際のアプリケーションでこれを行うことはできません

私が間違っていることを誰かが指摘できますか?ちなみに、これはiPhoneで見た場合にのみ発生します。 Chromeで開いたときはすべて正常です。

var proxy = new Ext.data.RestProxy({ 
    format: 'json', 
    url: '/tabs/1/members', 
    reader: { 
    type: 'json', 
    root: 'data' 
    } 
}); 

Ext.regModel('User', { 
    fields: [ 'name' ], 
    proxy: proxy 
}); 

var store = Ext.regStore('myStore', { 
    model: 'User', 
    autoLoad: true 
}); 

MyList = Ext.extend(Ext.Panel, { 
    fullscreen: true, 
    layout: {type: 'card' }, // Commenting this line also 'fixes' the problem 
    initComponent: function() { 

    this.list = new Ext.List({ 
     itemTpl: '<div>{name}</div>', 
     store: 'myStore', 
     scroll: false, 
     autoHeight: true 
    }); 

    this.items = this.list; 

    MyList.superclass.initComponent.call(this); 
    } 

}); 

Ext.reg('mylist', MyList); 

Ext.setup({ 
    onReady: function() { 
    new MyList(); 
    } 
}); 

答えて

0

私は理由は考えていませんが、思い出したものを変更していないにもかかわらず、今は動作しているようです。最初は、私はリスト 'ui:round' 'を最大にして修正したと思っていましたが、この理論をテストしようとしたときに、私が質問に投稿したコードを実行したところ、すべてうまくいくようでした。 ui:roundを復元しても、すべてが動作します。

私は原因を突き止めることができるかどうかを確認するために後で差分を試みるかもしれませんが、それはしばらくの間起こらないかもしれません。ごめんなさい。

0

私は解決策を知っていますが、それは良いことではありません。 initComponentメソッドでは、ストアを手動でロードするか(たとえばstore.load())、store-load-eventにメソッドを追加することができます。 store.load()メソッドは、ストアがロードされた後に実行されるコールバックメソッドを受け入れます。このコールバックでは、ストアをリストにバインドしてレンダリングする必要があります。

+0

私はこれをテストする時間がありませんでしたが、すぐに私は結果を投稿します。ありがとう。 –

関連する問題