3

很长一段时间以来,我一直在尝试获取要显示的列表。我尝试了各种人的各种技巧,但没有成功。现在我遇到了一个新问题。我已经从一个示例中获取了确切的代码,但我似乎也无法让它工作。首先,这里是代码。

Station.js

Ext.define('Syl.model.Station', {
extend: 'Ext.data.Model',

config: {
    fields: [
        { name: 'id', type: 'string' },
        { name: 'stop', type: 'string' }
    ]
}
});

Stations.js

Ext.define('Syl.store.Stations', {
extend  : 'Ext.data.Store',
requires: ['Syl.model.Station'],
id: 'stations',
xtype: 'stations',
config  : {
    model : 'Syl.model.Station',
    autoLoad : true,
    data: [
        { "id": "129", "stop": "NY Station" },
        { "id": "13", "stop": "Newark Station" }
    ]
}
});

我的服务.js

Ext.define('Syl.view.MyService', {
extend: 'Ext.Panel',
xtype: 'stationsformPage',
requires: [
'Syl.store.Stations',    
'Ext.form.FieldSet',
'Ext.field.Password',
'Ext.SegmentedButton',
'Ext.List'
],

config: {
    fullscreen: true,
    layout: 'vbox',
    items: [
    {
        docked: 'top',
        xtype: 'toolbar',
        title: 'My Service'
    },

    {
                    [OLDER CODE BEGIN]
        xtype: 'list',
        title: 'Stations',
        //store: 'Stations',
        store: stationStore, //UPDATED
        styleHtmlContent: true,
        itemTpl: '<div><strong>{stop}</strong> {id}</div>'
                    [OLDER CODE END]

                    [UPDATE X2 CODE BEGIN]
        xtype: 'container',
        layout: 'fit',
        flex: 10,
        items: [{
            xtype: 'list',
            title: 'Stations',
            width: '100%',
            height: '100%',
            store: stationStore,
            styleHtmlContent: true,
            itemTpl: '<div><strong>{stop}</strong> {id}</div>'
        }]
                    [UPDATE X2 CODE END]
    },

    ]
}
});

app.js(编辑到基础)

var stationStore; //UPDATED

Ext.application({
    name: 'Syl',
    views: ['MyService'],
    store: ['Stations'],
    model: ['Station'],

    launch: function() {
    stationStore = Ext.create('Syl.store.Stations');//UPDATED
    var mainPanel = Ext.Viewport.add(Ext.create('Syl.view.MyService'));
    },
});

好的,现在当我在浏览器中运行它时,我得到这个错误:“[WARN][Ext.dataview.List#applyStore] 找不到指定的商店”。应用程序运行但没有列表。我无法理解这段代码如何为给出示例的人而不是我工作。Sencha Touch版本会有所不同吗?我正在使用 2.0.1.1。

除此之外,我一直遇到列表不显示的问题。我最初在没有商店的情况下尝试了一份精简清单。我试图在列表的配置中设置数据属性。我没有收到此错误,但也没有显示列表。这就是为什么我想我会尝试别人的代码。我想如果我至少可以建立并运行一个工作列表,我可以操纵它来做我想做的事。

任何帮助将不胜感激。谢谢。

[更新]好的,所以我做了更多的搜索,有人告诉我我需要有一个我的商店实例才能加载到列表中,而不是商店定义。因此,如您所见,我更新了代码,错误消失了。问题是我仍然没有得到清单。我完全没有错误,但我看不到列表。我没有正确加载数据吗?还是我没有正确地将列表放入视图中?

[更新的 X2] 好的,所以我知道列表应该在一个容器中,并且我应该给它一个宽度和一个高度。我不完全确定这是否正确,但我现在确实有一个可以上下拖动的列表。问题是里面还是什么都没有。有人知道为什么吗?

4

3 回答 3

2

好的,我现在显示我的列表。我认为最好的办法是让其他人知道我做错了什么,以防他们遇到同样的问题。首先,我遇到的一些问题可以在我的问题的更新中找到。其次,在阅读了此错误报告后,我终于弄清楚了为什么我的列表没有显示:http://www.sencha.com/forum/showthread.php?186957-List-%E2%80%9C-WARN-Ext。 dataview.List-applyStore-The-specified-Store-cannot-be-found

我所做的和这里描述的有一些关键的区别。主要问题似乎是我没有向 StoreManager 注册商店。似乎向 Store 添加 id 实现了这一事实。实际上,这已经完成了,所以我将列表中的引用更改为那个 id 而不是我有商店实例的变量。在这样做时,我假设列表正在从商店经理那里获取商店. 然后它神奇地起作用了。

以下是我的代码与我的问题中的代码的区别:

我的服务.js

store: stationStore, [OLD]
store: 'stations',   [NEW]

应用程序.js

stationStore = Ext.create('Syl.store.Stations'); [OLD]
Ext.create('Syl.store.Stations');                [NEW]

似乎由于 storeManager 负责存储,我不需要将实例保存在变量中,这对我来说似乎比拥有全局变量更好。

所以我学到的关于列表的东西(这很痛苦)是。他们喜欢在容器里。似乎只在面板上有一个似乎不起作用。我听说它们可以直接添加到选项卡面板中,尽管我还没有测试过。这可能是我的第一个问题,然后我将其与商店问题相结合。其次,列表喜欢从 StoreManager 获取他们的商店。因此,使用 id 定义您的商店并创建它的实例。然后让列表使用其 id 引用商店。

我希望这可以帮助其他菜鸟不要浪费我必须让列表正常工作的时间。

于 2012-09-10T04:56:18.097 回答
1

'因为您在 Store id: 'stations'中定义,您必须在列表配置中定义

store: 'stations'

小写第一个字符...

从商店定义中删除 xtype: 'stations'...

干杯,奥列格

于 2012-09-08T21:36:42.183 回答
1

在 MyService.js 中使用新代码并注释掉旧代码,只需将 store: stationStore, 更改为: store: 'stations',

那真的应该这样做。

完整版块供参考

Ext.define('Syl.view.MyService', {
    extend: 'Ext.Panel',
    xtype: 'stationsformPage',
    requires: [
        'Syl.store.Stations',    
        'Ext.form.FieldSet',
        'Ext.field.Password',
        'Ext.SegmentedButton',
        'Ext.List'
    ],

    config: {
        fullscreen: true,
        layout: 'vbox',
        items: [
        {
            docked: 'top',
            xtype: 'toolbar',
            title: 'My Service'
        },

        {
            xtype: 'container',
            layout: 'fit',
            flex: 10,
            items: [{
                xtype: 'list',
                title: 'Stations',
                width: '100%',
                height: '100%',
                store: 'stations',
                styleHtmlContent: true,
                itemTpl: '<div><strong>{stop}</strong> {id}</div>'
            }]
        },

        ]
    }
});
于 2012-09-08T21:36:43.673 回答