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" }
    ]
}
});

MyService.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を使用しています。

これに加えて、リストが表示されないという一般的な問題が発生しています。私はもともと、店舗さえも持たずに、必要最小限のリストを試していました。リストの設定で data プロパティを設定しようとしました。このエラーは発生しませんでしたが、表示するリストも取得できませんでした。そのため、他の人のコードを試してみようと思いました。少なくとも作業リストを作成して実行できれば、それを操作して自分のやりたいことを実行できると考えました。

どんな助けでも大歓迎です。ありがとう。

[更新] さて、さらに調査を行ったところ、ストアの定義ではなく、ストアのインスタンスをリストにロードする必要があると誰かに言われました。ご覧のとおりコードを更新したところ、エラーはなくなりました。問題は、まだリストを取得できないことです。エラーはまったくありませんが、リストが表示されません。データを正しくロードしていませんか? または、リストをビューに正しく配置していませんか?

[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 に変更しました。これを行う際に、リストがストア マネージャーからストアを取得していると仮定します。 . その後、魔法のように機能しました。

私のコードと私の質問のコードの違いは次のとおりです。

MyService.js

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

app.js

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

storeManager がストアを処理するため、インスタンスを変数に保持する必要はないようです。これは、グローバル変数を使用するよりも優れているように思えます。

したがって、私がリストについて学んだこと(これは苦痛です)は次のとおりです。彼らはコンテナにいるのが好きです。パネルに 1 つだけでは機能しないようです。まだテストしていませんが、タブ パネルに直接追加できると聞きました。それはおそらく私の最初の問題であり、その後、店舗の問題を悪化させました. 次に、リストは StoreManager からストアを取得するのが好きです。したがって、ストアを ID で定義し、そのインスタンスを作成します。次に、ID を使用してリストにストアを参照させます。

これにより、他の初心者がリストを機能させるために必要な時間を無駄にしないようになることを願っています.

于 2012-09-10T04:56:18.097 に答える
1

'ストア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 に答える