0

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回入力されないようにするにはどうすればよいですか?!

4

2 に答える 2

0

Extjsを使用してモデルに主キーを「設定」することはできません。コンセプト自体はライブラリに存在しません。レコードのIDは一意である必要がありますが、それを強制するものは実際にはありません。あなたへの私の質問は、重複したレコードが追加されたときに何をしたいのかということです。キーに基づいてレコードの値を上書きしますか?例外が必要ですか?

ストアで「add」イベントを使用して、次のようなコードを入力することをお勧めします。

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 に答える