Требуемые конфигурации DataView добавлены, но все еще выдается ошибка? (tpl: vs. itemTpl) - PullRequest
1 голос
/ 13 июля 2011

Я работаю с примером MVC здесь , и обошел данные контактов PhoneGap и заменил их своей собственной моделью и хранилищем.Когда я добавляю список на панель, я указываю на myApp.stores.products.Список представляет собой DataView, поэтому tpl, store и itemSelector являются обязательными, но в примере пропускается itemSelector и используется itemTpl вместо tpl ...

items: [{
        xtype: 'list',
        store: myApp.stores.products,
        itemTpl: '{productName}',
        onItemDisclosure: function (record) {
            //Ext.dispatch({
            //    controller: myApp.controllers.products,
            //    action: 'show',
            //    id: record.getId()
            //});
        }
    }]

Естественно, я получаю предупреждение консоли следующим образом:

Uncaught DataView требует определения конфигураций tpl, store и itemSelector.

Итак, я изменяю конфигурацию на какуюЯ знаю, что должно быть, и теперь получаю ошибку ...

items: [{
    xtype: 'list',
    store: myApp.stores.products,
    tpl: '{productName}',
    itemSelector: 'div.productView',
    onItemDisclosure: function (record) {
        //Ext.dispatch({
        //    controller: myApp.controllers.products,
        //    action: 'show',
        //    id: record.getId()
        //});
    }
}]

Uncaught Error: Ext.List: itemTpl является обязательной конфигурацией.

Итак, чтоэто?itemTpl или tpl?И почему Ext.List не знает, что использовать?Я даже попытался добавить и tpl, и itemTpl, просто чтобы быть в безопасности, и все же получил первую из двух ошибок, описанных выше.

ПРИМЕЧАНИЕ: Вот как это выглядит вконтекст панели:

myApp.views.ProductList = Ext.extend(Ext.Panel, {
    dockedItems: [{
        xtype: 'toolbar',
        title: 'Products'
    }],
    items: [{
        xtype: 'list',
        store: myApp.stores.products,
        tpl: '{productName}',
        itemSelector: 'div.productView',
        onItemDisclosure: function (record) {
            //Ext.dispatch({
            //    controller: myApp.controllers.products,
            //    action: 'show',
            //    id: record.getId()
            //});
        }
    }],
    initComponent: function() {
        myApp.stores.products.load();
        myApp.views.ProductList.superclass.initComponent.apply(this, arguments);
    }
});

ОБНОВЛЕНИЕ: Я думаю, что это раздражает initComponent.apply () ...

myApp.views.ProductList.superclass.initComponent.apply(this, arguments);

Ответы [ 2 ]

1 голос
/ 26 июля 2011

У меня была такая же проблема, но для меня проблема была в том, что в имени переменной, используемой для вызова прокси-сервера, была ошибка: я вводил прописные буквы, когда требовалась строчная.Пример с вашим кодом: я использовал myApp.stores.Products вместо myApp.stores.products .

Но чтобы найти ...

требуется время
1 голос
/ 13 июля 2011

Хорошо. Помещая точку останова в функцию initComponent Sencha Touch, я вижу, что она вообще не имеет ничего общего с tpl или itemTpl. Почему-то мой магазин не определен. Теперь о новой тайне ...

Магазин не был определен во время создания этой панели и списка. Итак, окончательное исправление привело к переключению порядка включения файлов .js в index.html. Теперь работает как талисман.

...