设置Sencha Touch 2商店以检索少量数据以从jsonp响应生成多个模型实例可能很简单。但是,我正在开发一个可以在服务器上使用相当大的数据集(法律意见)的应用程序,所以我必须从服务器检索一个可用记录列表 - 如果你愿意的话,索引 - 然后当用户点击列表中的项目时,检索单个完整记录。
我正在寻找任何推荐的方法。这是我到目前为止设置的,只是部分工作:
当用户点击应用中法律意见列表中的一个项目时,监听器会触发一个控制器选中的事件。控制器使用列表项的相应记录的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 action减少无关的数据传输?
答案 0 :(得分:0)
这有效:
onDisplayAuthority: function(list, record) {
console.log('onDisplayAuthority');
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({
callback: function(records, operation, success) {
// the operation object contains all of the details of the load operation
var data = records[0].getData();
authorityView.setRecord(records[0]);
authorityView.getComponent("authorityViewBody").setData(data);
authorityView.getComponent("titlebar").setTitle(data.title);
},
scope: this});
Ext.Viewport.animateActiveItem(authorityView, this.slideLeftTransition);
}
通过在商店的#load方法中放置在回调中设置authorityView
数据的代码行,我能够访问新记录。我不知道为什么我必须这样做,并希望评论。但是,这种方法 工作。