Sencha Touch DataView не показывает товары из магазина - PullRequest
4 голосов
/ 04 февраля 2012

Я использую Sencha touch 2. У меня есть хранилище, которое загружается из существующего объекта 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. Добавление stores: ['Dataset'], которое вызвало создание majestic.store.Dataset и регистрациюэто в StoreManager

PS Это также можно сделать с помощью this.setStore(new majestic.store.Dataset()) в initialization методе GridView, но я предпочитаю декларативный способ там, где это возможно

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

Вот несколько советов:

  1. Попробуйте установить для магазина значение 'majestic.store.Dataset' вместо просто набора данных
  2. Добавьте зависимость магазина в свое приложение.js вот так:

    Ext.application({
        name: 'majestic',
        stores: ['Dataset'],
    
        launch: function() {   
           ...
        }
    });
    
  3. Вместо передачи строки в свойство store, передайте экземпляр:

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

OptionКажется, # 1 - самый очевидный способ работы .Если это не так, это может быть ошибкой в ​​ST2.

0 голосов
/ 12 июня 2012

Может быть, вы пропустили поле идентификатора

Во всяком случае, я строю в Architect безуспешно, но, похоже, это совсем другая проблема. Я буду следовать руководству по архитектуре (создание вашего первого мобильного приложения) и, возможно, получу представление.

...