0

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

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'}]
});

我怎样才能使用这个主键来防止两次输入相同的记录?!

4

2 回答 2

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");
                }
            }
        }
    }
});

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

于 2012-08-13T14:18:29.463 回答
-3

idProperty 呢?

如果您在模型上设置了 idProperty,它将充当主键。

于 2012-09-25T23:43:38.760 回答