4

私はSenchatouch2を使用しています。既存のjsオブジェクトからのロードを保存しています:

Ext.define('majestic.store.Dataset', {
    extend : 'Ext.data.Store',

    requires : [
        'majestic.model.Dataset',
        'majestic.util.config.ConfigurationManager'
    ],
    config : {
        model   : 'majestic.model.Dataset',
        type: 'memory',
        reader: 'json',
        autoLoad : true,
        proxy: {
            type: 'memory',
            reader: {
                type: 'json',
                rootProperty : 'datasets'
            }
        }

    },
    constructor: function(config) {
        this.callParent(arguments);
        this.applyData(majestic.util.config.ConfigurationManager.getConfig());
    }

});

モデル:

Ext.define('majestic.model.Dataset', {
    extend : 'Ext.data.Model',

    config : {
        fields : [
            'title'
        ],

        associations: [
              {type: 'hasMany', model: 'Layer', name: 'layers'}
        ]

    }
});

そして表示:

Ext.define('majestic.view.LayerList', {
    requires: ['majestic.store.Dataset'],
    extend: 'Ext.dataview.List',
    config:{
        store: 'Dataset',
        itemTpl: '<div>{id} is {title}</div>',
        itemSelector: "div"
    }
});

Sencha touchでデータビューを見た後、autoLoadとitemSelectorを追加しましたが、まだ運がありません。

走っているのに

new majestic.store.Dataset().each(function(i) {console.log(i)}); 

データ属性が入力されたオブジェクトのリストを出力します。

アップデート

私は@fbrandelに同意します。最初のオプションはそれがどのように機能するかですが、STソースを読んだ後、dataviewのストアパラメーターは次のように解釈されることがわかりました。

  • ストアオブジェクト
  • ここの最初の例のようなjsonストア表記
  • StoreManager.lookupを使用して解決できる作成済みストアの名前

だから私は結局:

  1. store:'Dataset'ビューに残します
  2. ストアに追加storeId : "Dataset"するため、StoreManagerで解決できます
  3. これを追加すると、StoreManagerstores: ['Dataset']が作成されて登録されます。majestic.store.Dataset

PSthis.setStore(new majestic.store.Dataset())これはGridViewのメソッドを使用して行うこともできますが、可能なinitialization場合は宣言型の方法を好みます

4

2 に答える 2

2

ここにいくつかの提案があります:

  1. ストアをデータセットだけでなく「majestic.store.Dataset」に設定してみてください
  2. 次のように、ストアの依存関係をapp.jsに追加します。

    Ext.application({
        name: 'majestic',
        stores: ['Dataset'],
    
        launch: function() {   
           ...
        }
    });
    
  3. ストアプロパティに文字列を渡す代わりに、インスタンスを渡します。

    store: Ext.create('majestic.store.Dataset')
    

オプション#1は、それがどのように機能するかを示す最も明白な方法のようです。そうでない場合、これはST2のバグである可能性があります。

于 2012-02-04T21:57:17.793 に答える
0

たぶんあなたのIDフィールドがありません

とにかく、私も運が悪かったアーキテクトで構築していますが、まったく別の問題のようです。アーキテクト(最初のモバイルアプリの構築)のチュートリアルに従い、洞察を得るかもしれません。

于 2012-06-12T06:45:44.120 に答える