2012-08-13 68 views
0

我有一個網格模型的網格面板。如何將主鍵設置爲該網格存儲,以便我可以防止重複值。我的模型是:如何在網格模型中使用primaryKey在extjs4中

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

如何使用此主鍵防止兩次輸入同一記錄?

回答

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

該代碼會拋出異常,但不會停止記錄被添加。

+0

謝謝你的回覆。有什麼辦法可以將關鍵字段設置爲網格商店中的主鍵。我真正想要的是如果相同的記錄添加兩次第一個記錄應該被替換。還有另外1個問題,你說模型中沒有p_key,然後使用assosciation – hsnGunda 2012-08-13 14:57:04

+0

你似乎有一個數據庫的心態,而Javascript不是數據庫,它的目的與數據庫的目的不一樣。在JavaScript中使用關聯不是爲了長時間存儲和約束數據的關係,而是心態是如何最好地關聯和操縱數據顯示給用戶的方式。所以你可以這樣想,數據庫用於存儲數據,javascript是你的窗口查看數據的工具。 – Reimius 2012-08-13 15:04:04

+0

說了這樣的話:「有沒有什麼辦法將關鍵字段設置爲網格商店中的主鍵」從javascript的角度來看沒有意義,所以答案是否定的。您必須手動定義您對自己的JavaScript代碼的主鍵的解釋,因爲Extjs不提供「主鍵」功能,並且即使他們這樣做了,也可能不是您如何設置您的主鍵數據庫來處理主鍵場景。 – Reimius 2012-08-13 15:06:49

-3

idProperty怎麼樣?

如果您在模型上設置了idProperty,它將充當主鍵。

+0

我不同意Reimius。 – Dawesi 2013-12-03 14:56:48

+0

Downvote忽略......由於Reimius的研究不力 – Dawesi 2013-12-03 15:04:37

+1

@Dawesi你顯然是錯的 – 2014-04-15 13:45:20

相關問題