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 中的添加/删除按钮动态添加/删除文本字段

在 Sencha Touch 2 中提交表单

如何在 Sencha Touch 中的商店之间同步

如何通过 ajax 在 javascript 中使用个人 http 标头加载图像(sencha touch 2)

如何在sencha touch 2中获取当前活动的轮播项目

Sencha Touch 不会隐藏我的列表