jsonp 応答からいくつかのモデル インスタンスを生成するために、Sencha Touch 2 ストアを設定していくつかのデータを取得するのは簡単かもしれません。ただし、私はサーバー上で利用可能なかなり大きなデータ セット (法的意見) を操作するアプリを開発しているため、サーバーから利用可能なレコードの単なるリスト (必要に応じてインデックス) を取得する必要があります。ユーザーがリスト内のアイテムをタップすると、単一の完全なレコードが取得されます。
これを行うための推奨される方法を探しています。これは私がこれまでに設定したもので、部分的にしか機能していません:
- :index および :show RESTful アクションをサーバー側で定義して、法的意見を取得しています。
- クライアント側には、インデックス エントリ (利用可能なデータのリストを構成する) のモデルとストアがあり、サーバー上の :index RESTful アクションからの jsonp 応答を介してデータをプルし、利用可能なデータのインデックスを作成します。リストコンポーネントで。これらのインデックス エントリのフィールドには、法的意見の全文は含まれていませんが、当事者の名前と引用のみが含まれています。
- 完全な法的意見のモデルとストアがあります。ストアは、サーバー上の :show RESTful アクションを介して、一度に 1 つの法的意見をサーバーから取得します。
ユーザーがアプリ内の法的意見のリスト内の項目の 1 つをタップすると、リスナーがイベントを発生させ、コントローラーがそれを取得します。コントローラーは、次のように、リスト項目の対応するレコードの ID を使用して、サーバー上の :show アクションの適切な URL を決定します。
# Controller: onDisplayAuthority: function(list, record) { console.log('onDisplayAuthority'); this.activateAuthorityView(record); var authorityView = this.getAuthorityView(); authorityStore = Ext.getStore('Authority'); var authorityId = record.getData().id; var url = 'http://localhost:3000/api/authorities/' + authorityId + '.json'; var proxy = { type: 'jsonp', url: url, reader: { type: 'json', rootProperty: "authority" } }; authorityStore.setProxy(proxy); authorityStore.load(); authority = authorityStore.first(); var data = authority.getData(); authorityView.setRecord(authority); authorityView.getComponent("authorityViewBody").setData(data); authorityView.getComponent("titlebar").setTitle(data.title); Ext.Viewport.animateActiveItem(authorityView, this.slideLeftTransition); }
このコードは機能しません。何らかの理由で、上記のコード内で実行すると、完全な法的意見が含まれているconsole.log(authorityStore)
ことがわかります。authorityStore.data.all[0]
しかし、実行するconsole.log(authorityStore.data.all[0])
と が返されます[]
。さらに、 をauthorityStore.first();
返しますundefined
が、Sencha Touch 2 のドキュメントでは、これ#first()
は有効なストアのメソッドであり、有効なストアであることが示されていauthorityStore
ます。
だから、私は何か基本的なものを見逃しているか、これについては人里離れた道を進んでいます.
(i) 私の問題に対する迅速な解決策、または (ii) :index: と :show アクションの両方を使用して余分なデータ転送を削減する別の方法を誰かが持っていますか?