Sencha Touch 2 - 我如何通过回调调用 JsonP 中的细节
Posted
技术标签:
【中文标题】Sencha Touch 2 - 我如何通过回调调用 JsonP 中的细节【英文标题】:Sencha Touch 2 - How can I recall a detail from a JsonP with a callback 【发布时间】:2013-04-24 04:47:07 【问题描述】:我制作了一个从外部网站获取新闻的应用程序。
我在这个商店中使用一个从 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 显示详细信息,该 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”称为主列表,正如您在“listeners”中看到的那样,我创建了一个新商店,它引用了一个 jsonp 只是为了详细说明,在这种情况下只有新闻的标题。例如这个网址:http://www.grottaglie24.it/rss/article.php?callback=callback621
我成功地通过回调调用了 id,但是当我点击列表中的项目时不显示任何内容。例如,如果我点击带有“id”= 698 的项目,我会收到以下错误: TypeError: 'undefined' is not a function (evalating 'Ext.data.JsonP.callback698("title": "Here the title of the news......")')
为什么它会识别“id”并调用回调,但我没有显示任何内容?
非常感谢。
【问题讨论】:
如果您找到了解决方案,请添加答案。 【参考方案1】:删除 autoLoad:true 并仅在需要时加载它。
你可以在load方法中引用你的回调函数。
var articoliStore = Ext.getStore('articoliStore');
articoliStore .load(
callback:function()
articoliStore.each(function(record)
console.log(JSON.stringify(record));
);
);
【讨论】:
【参考方案2】:我认为问题在于您将 ID 添加到 callbackKey 中,如下所示:
callbackKey: 'callback' + record.get('id')
你应该简单地将你的 callbackKey 定义为“回调”
服务器将始终查找回调查询字符串,但是,Sencha Touch 会自行递增函数 callbackX。例如,您的第一个回调函数是:
Ext.data.JsonP.callback1
你的第二个:
Ext.data.JsonP.callback2
我猜你得到 undefined is not a function 错误,因为 Ext.data.JsonP.callback698 不是函数。尝试将您的回调键更改为“回调”,然后告诉我们会发生什么。
【讨论】:
以上是关于Sencha Touch 2 - 我如何通过回调调用 JsonP 中的细节的主要内容,如果未能解决你的问题,请参考以下文章
SENCHA:如何通过单击 SENCHA touch 中的添加/删除按钮动态添加/删除文本字段