3

我制作了一个从外部站点获取新闻的应用程序。

我在这个商店中使用了一个从 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新闻......”})')

为什么它识别“id”并调用回调但我没有显示任何内容?

非常感谢。

4

2 回答 2

0

删除 autoLoad:true 并仅在需要时加载它。

您可以在 load 方法中引用您的回调函数。

var articoliStore = Ext.getStore('articoliStore');
articoliStore .load({
    callback:function(){
        articoliStore.each(function(record) {                           
            console.log(JSON.stringify(record));    
            });
    }
});
于 2014-05-21T12:12:17.100 回答
0

我认为问题在于您将 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 不是函数。尝试将您的回调键更改为“回调”并让我们知道会发生什么。

于 2014-05-22T01:45:11.057 回答