1

我是 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 总是抛出cannot call insert of undefined 在发出一些警报后我发现this.store 返回null。我检查了 Ext 示例代码,但我没有做任何不同的事情。

请帮忙 :(

4

2 回答 2

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

  2. 阅读煎茶指南和演练。从您的代码示例中,很明显您以完全错误的方式使用它——您不需要做所有这些手动工作来分配和重新分配存储——这一切都由 ExtJs 自动处理。

于 2012-04-22T11:46:32.090 回答
0

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

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

我会在这一行之后休息一下,以确保您的“类别”对象已正确创建。

关于使用“this”,我建议您查看直接使用它的危险。许多情况可能会导致它超出您的预期。有关 javascript 陷阱的更多信息,请参见此处

于 2013-02-08T16:48:31.427 回答