Sencha Touch 2 - 如何通过回调从JsonP中回忆起细节

时间:2013-04-30 09:50:49

标签: callback sencha-touch-2 jsonp

我创建了一个从外部网站获取新闻的应用程序。

我使用一个列表来回忆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”并调用回调但我没有显示任何内容?

非常感谢。

2 个答案:

答案 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不是函数。尝试将您的回调密钥更改为"回拨"让我们知道会发生什么。