this.store未定义

时间:2012-04-22 11:28:31

标签: extjs

我是Ext库的初学者,我正在尝试扩展一个网格面板并从我的一个新类记录中引用它的商店:

Ext.define('App.ui.CategoryGridPanel', {
extend : 'Ext.grid.Panel',
initComponent : function() {
    var storeToUse = this.store;

    if (storeToUse == null) {
        storeToUse = Ext.data.StoreManager.lookup(StoreIDs.CategoryStore);
    }

    this.categoryRowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
        clicksToEdit : 2,
        store : storeToUse,
        listeners : {
            edit : function(editor, e) {
                this.store.sync();
            }
        }
    });

    Ext.apply(this, {
        store : storeToUse,
        height : 400,
        width : 300,
        plugins : [ this.categoryRowEditing ],
        columns : [ {
            header : 'Description',
            dataIndex : 'description',
            flex : 1,
            sortable : true,
            editor : 'textfield'
        } ],
        tbar : [ {
            xtype : 'button',
            text : 'New',
            handler : this.insertNewCategory
        } ]
    });

    this.callParent(arguments);
},
/**
 * Add new Category to grid.
 */
insertNewCategory : function() {
    var category = Ext.create(ModelNames.Category, {
        description : ''
    });

    this.store.insert(0, category);
    this.categoryRowEditing.startEdit(0, 0);
}

});

方法inserNewCategory总是抛出不能调用未定义的插入 在发出一些警报后,我发现this.store返回null。 我检查了Ext示例代码,但我没有做任何不同的事情。

请帮助:(

2 个答案:

答案 0 :(得分:1)

  1. 检查insertNewCategory方法中的this。你会感到惊讶。我的赌注 - 这将是你按下的按钮,因为你没有对这个功能的范围做任何事情。

  2. 阅读Sencha指南和演练。从您的代码示例中可以清楚地看到,您以完全错误的方式使用它 - 您不需要执行所有这些手动工作来分配和重新分配存储 - 这全部由ExtJs自动处理。

答案 1 :(得分:0)

您的类别对象的创建似乎失败了:

var category = Ext.create(ModelNames.Category, {
    description : ''
});

我会在此行之后休息一下,以确保您的'category'对象已正确创建。

关于使用'this',我建议你查看它直接使用的危险。许多场景可能导致它不是您期望的其他内容。有关javascript陷阱的更多信息,请参阅here