2

完全なコードの Git Ropo

私は定義しました:

/アプリ/モデル/トド:

Ext.define('Test.model.Todo', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            { name: 'title', type: 'string' },
            { name: 'priority', type: 'integer', defaultValue: 0 },
            { name: 'done', type: 'boolean' }
        ]
    }
});

/アプリ/ストア/トドストア

Ext.define('Test.store.TodoStore', {
    extend: 'Ext.data.Store',
    requires: [ 'Test.model.Todo' ],
    config: {
        model: 'Test.model.Todo',
        data: [
            { title: 'Todo Item 1', priority: 0, done: false },
            { title: 'Todo Item 2', priority: 0, done: false },
            { title: 'Todo Item 3', priority: 0, done: false },
            { title: 'Todo Item 4', priority: 0, done: false },
            { title: 'Todo Item 5', priority: 0, done: false },
            { title: 'Todo Item 6', priority: 0, done: false }
        ]
    }
});

今、store: 'TodoStore'リストで使用すると、次のようになります

[WARN][Ext.dataview.List#applyStore] 指定されたストアが見つかりません

だから私もapp.jsを追加しました

Ext.application({
    name: 'Test',
    ...
    stores: [ 'TodoStore' ],

警告は消えますが、まだ空白のリストがあります。何か不足していますか?


以下の古い投稿

Ext.define("SimpleTodo.view.Main", {
    extend: 'Ext.Panel',
    requires: [ 'Ext.TitleBar', 'Ext.dataview.List' ],
    config: {
        styleHtmlContent: true,
        items: [
            ...
            {
                xtype: 'list',
                itemTpl: '{name}',
                store: {
                    fields: ['name'],
                    data: [
                        { name: 'Todo 1' },
                        { name: 'Todo 2' },
                        { name: 'Todo 3' },
                        { name: 'Todo 4' },
                        { name: 'Todo 5' },
                        { name: 'Todo 6' }
                    ]
                }

            }
        ]
    }
});

取得:

instanceof check で関数を期待していましたが、取得しました#<Object>

4

3 に答える 3

1

結局のところ、パネル内でリストを定義することはできません(ただし、このビューはタブパネルの一部である可能性があります)。それで:

Ext.define("SimpleTodo.view.Main", {
    extend: 'Ext.dataview.List',
    config: {
        title: 'Simple Todo',
        itemTpl: '{name}',
        store: 'myStore'
    }
}

更新:これは、タイトルバーのあるコンテナ内のリストの例です。layout: 'vbox'コンテナとflex: 1リストのに注意してください。これらは両方とも、リストを正しく表示するために必要です。

Ext.define("SimpleTodo.view.Main", {
    extend: 'Ext.Container',
    config: {
        layout: 'vbox',

        items: [
            {
                xtype: 'titlebar',
                docked: 'top',
                title: 'Simple ToDo'
            },
            {
                xtype: 'listcmp',
                flex: 1
            }
        ]
    }
}

リスト定義を含む別のビューを使用します。例えば:

Ext.define('SimpleTodo.view.ListCmp', {
    extend: 'Ext.List',
    xtype: 'listcmp',

    config: {
        store: 'SimpleToDo',
        itemTpl: '{title}'
    }
}
于 2012-05-18T21:27:57.013 に答える
1

これは、Sencha Touch がストアの定義方法を理解していないためです。

3 つのステップで構成される、次のようなことを行う必要があります。

モデルの定義

Ext.define('SimpleTodo.model.listitem',{
    extend: 'Ext.data.Model',
    config: {
        fields: [
            {name: 'name', type: 'string'},
        ],
    }
})

ストアの定義:

Ext.define('SimpleTodo.store.listitems', {
    extend: 'Ext.data.Store',

    config: {
        model: 'SimpleTodo.model.listitem',
        data: [
             { name: 'Todo 1' },
                        { name: 'Todo 2' },
                        { name: 'Todo 3' },
                        { name: 'Todo 4' },
                        { name: 'Todo 5' },
                        { name: 'Todo 6' }
        ],
    }
});

最後に、あなたのリストで:

store: 'listitems'

お役に立てれば。

于 2012-05-13T13:25:25.787 に答える
0

ストアの完全なクラスパスを指定してみてください:

store: 'SimpleTodo.store.listitems',

フレームワークは、クラス/ファイル名だけではどのクラスを参照しているのかわからないと思います。

それでも機能しない場合は、リストに表示するものがないと思われるので、リスト itemTpl 構成を構成してみてください。

itemTpl: '{name}',
于 2014-04-15T15:23:50.823 に答える