如何在extjs 4中使用网格模型中的主键

时间:2012-08-13 13:27:57

标签: extjs4.1

我有一个带有一个网格模型的网格面板。如何将主键设置为该网格存储,以便我可以防止重复值。我的模特是:

Ext.define('product',{
        extend : 'Ext.data.Model',
            fields: [{name: 'name',type: 'string'}, 
            {name: 'column1', type: 'int'},  
            {name: 'column2', type: 'int'}]
     associations: [{type: 'belongsTo',model: 'product',primaryKey: 'column1'}]
});

如何使用此主键防止两次输入相同的记录?!

2 个答案:

答案 0 :(得分:0)

您无法使用Extjs在模型上“设置”主键。概念本身在图书馆中不存在。记录的ID必须是唯一的,但实际上没有什么能够强制执行它。我的问题是,当你添加重复记录时,你甚至想做什么?您是否希望根据密钥覆盖记录的值?你想要一个例外吗?

我能为您提供的最佳建议是在商店中使用“添加”事件,并使用以下代码填写:

var myStore = Ext.create("Ext.data.Store", {
    listeners: {
        add: function(store, records){
            var checkRecords = store.getRange();//get the records to check against
            //clean out the records from the set that were just added
            for(var i = 0; i < records.length; i++)
                Ext.Array.remove(checkRecords, records[i]);

            for(var i = 0; i < checkRecords.length; i++)
            {
                for( var j = 0; j < records.length; j++)
                {
                    if(checkRecords[i].get("primary_key") == records[j].get("primary_key"))
                        throw "Duplicate primary key: " + records[j].get("primary_key");
                }
            }
        }
    }
});

该代码将抛出异常,但不会停止添加记录。

答案 1 :(得分:-3)

idProperty怎么样?

如果在模型上设置idProperty,它就会充当主键。