添加了所需的DataView配置但仍然出现错误? (tpl:vs. itemTpl)

时间:2011-07-12 20:55:39

标签: cordova sencha-touch extjs

我正在使用MVC示例here,并绕过了PhoneGap联系人数据并将其替换为我自己的模型和商店。当我向面板添加列表时,我将其指向myApp.stores.products。列表是DataView,因此需要tplstoreitemSelector,但该示例省略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()
            //});
        }
    }]

当然,我收到如下控制台警告:

  

未捕获的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()
        //});
    }
}]
  

未捕获错误:Ext.List:itemTpl是必需的配置。

那么,这是什么? itemTpl或tpl?为什么Ext.List不知道使用哪个?我甚至尝试添加tplitemTpl,只是为了安全起见,仍然是上面两个错误中的第一个。

注意: 这就是面板环境中的样子:

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 个答案:

答案 0 :(得分:1)

好。在Sencha Touch initComponent函数中放置一个断点,我发现它根本与tpl或itemTpl无关。不知何故,我的商店未定义。现在进入一个新的神秘......

在创建此面板和列表时,商店未定义。因此,最终修复最终切换了.js文件包含在index.html中的顺序。现在就像一个幸运的魅力。

答案 1 :(得分:1)

我遇到了同样的问题,但对我来说问题来自于用于调用代理的变量名称中存在错误的事实:当需要小写时我设置了大写。 使用您的代码:我使用 myApp.stores.Products 而不是 myApp.stores.products

但是需要时间才能找到......