0

我是 sencha touch 的新手,我正在尝试解析一组数据(这似乎不是一个不常见的用例,但我在网上找不到任何关于它的信息)。我在嵌套 json 上遵循了 sencha ext.data.reader.json 文档,但它不起作用。这是我的模型: 搜索结果(保存多个搜索结果):

Ext.define('GS.model.SearchResults', {
extend: 'Ext.data.Model',
autoLoad: true,
config: {
    fields: [
        {name: 'query', type: 'string'},
    ],
    hasMany  : {model: 'SearchResult', name: 'results'},

        }
});

和搜索结果,保存一个单独的搜索结果

Ext.define('GS.model.SearchResult', {
extend: 'Ext.data.Model',

config: {
    fields: [
        {name: 'id',     type: 'int'},
        {name: 'name',      type: 'string'}
    ],
    belongsTo: 'SearchResults'
}
});

然后在我的控制器中,我有以下代码:

var store = Ext.create('Ext.data.Store', {
        autoLoad: "true",
        model: "GS.model.SearchResults",
        proxy: 
        {
            type: 'ajax',
            url : 'www.someurl.com/?query=somequery',
            reader: {
                type: 'json'
            }
        }
    });
    store.load({
        callback: function() {
            console.log("Done Loading");
            var root = store.first();

            console.log("Results for " + root.get('query')); //this prints correctly


            console.log(root.results());//THIS IS THE LINE IM INTERESTED IN
            console.log(root.raw.results);//this weirdly works
            //now I want to print each search results name
            root.results().each(function(result) {
                console.log("Song: " + result.get('name'));
            });

        }
    });

}

当我记录 root.results() 时,我得到

未捕获的类型错误:对象 [对象对象] 没有方法“结果”

这正是他们在文档中的做法,所以有人知道为什么这不起作用???

编辑:这是我关注的文档

4

2 回答 2

0

After some painful trial and error, I figured it out. In the tutorial, they used unconventional model name, but in my case I needed to use the fully qualified one

So to fix I needed to change

hasMany  : {model: 'SearchResult', name: 'results'},

to

hasMany  : {model: 'GS.model.SearchResult', name: 'results'},

and same with my deeper model like this:

belongsTo: 'GS.model.SearchResults'

Tough error to catch, but I hope this can help someone else in my position

于 2012-12-16T21:49:41.257 回答
0

检查错误的最佳方法是在 chrome 控制台中进行调试。回调后,您将在 root.raw 或 root.data 中找到您的记录。

我用来在 chrome 控制台中调试并编写所需的代码。

于 2012-12-07T04:40:17.860 回答