我创建了一个从外部网站获取新闻的应用程序。
我使用一个列表来回忆JsonP中的项目,使用此商店:
Ext.define('Grottaglie.store.Articoli', {
extend: 'Ext.data.Store',
requires: [
'Grottaglie.model.Articolo'
],
config: {
autoLoad: true,
model: 'Grottaglie.model.Articolo',
storeId: 'articoliStore',
proxy: {
type: 'jsonp',
url: 'http://www.grottaglie24.it/rss/lastarticle.php?callback=callback1',
callbackKey: 'callback1',
reader: {
type: 'json',
idProperty: 'id'
}
}
}
});
这个JsonP有一个id,我想通过另一个JsonP来显示详细信息,其中只包含列表中每个项目的详细信息:
观看代码:
Ext.define('Grottaglie.view.Main', {
extend: 'Ext.navigation.View',
config: {
id: 'mainView',
items: [
{
xtype: 'list',
title: 'Grottaglie24',
itemId: 'articoli',
store: 'articoliStore',
itemTpl: '{id} {text}',
listeners: {
select: function(view, record) {
Ext.getCmp('mainView').push({
title: 'Politica',
xtype: 'panel',
store: Ext.create('Ext.data.Store', {
fields: ['title'],
proxy: {
type: 'jsonp',
url: 'http://www.grottaglie24.it/rss/article.php?callback=callback' + record.get('id'),
callbackKey: 'callback' + record.get('id'),
reader: {
type: 'json',
}
},
autoLoad: true
}),
html: '{title}'
});
}
}
}
]
}
});
所以我把“articoliStore”称为主列表,正如你在“听众”中看到的那样,我创建了一个新的商店,它引用了一个jsonp只是为了细节,在这种情况下只是新闻的标题。例如,此网址为:http://www.grottaglie24.it/rss/article.php?callback=callback621
我成功地回忆了回调的id,但是当我点击列表中的项目时没有显示任何内容。例如,如果我点击“id”= 698的项目,我会收到以下错误: TypeError:'undefined'不是函数(评估'Ext.data.JsonP.callback698({“title”:“这里是新闻标题......”})')
为什么它识别“id”并调用回调但我没有显示任何内容?
非常感谢。
答案 0 :(得分:0)
删除autoLoad:true并仅在需要时加载它。
您可以在加载方法中引用回调函数。
var articoliStore = Ext.getStore('articoliStore');
articoliStore .load({
callback:function(){
articoliStore.each(function(record) {
console.log(JSON.stringify(record));
});
}
});
答案 1 :(得分:0)
我认为问题在于您将这个ID添加到您的callbackKey中,如下所示:
callbackKey: 'callback' + record.get('id')
相反,您应该将callbackKey定义为" callback"
服务器将始终查找回调查询字符串,但是,Sencha Touch会自行增加函数callbackX。例如,您的第一个回调函数是:
Ext.data.JsonP.callback1
你的第二个:
Ext.data.JsonP.callback2
我猜你得到的undefined不是函数错误,因为Ext.data.JsonP.callback698不是函数。尝试将您的回调密钥更改为"回拨"让我们知道会发生什么。