Extjs Store findRecord 查詢API


下面列舉一些實例來說明Store findRecord 這個方法簡單使用。

比如你有一個userStore,這時想要去查找一個名字為Felix的user (前提當然是user model得有一個user的field),查詢如下:

var user = userStore.findRecord('firstName', 'Felix');

上面代碼執行的結果返回的是一個Model實例。

再看一個簡單實例,需求是得到Felix這個員工的ID號,查詢如下:

getUserID : function (name) {

  var userStore = this.getUserStore();

  var user =  userStore.findRecord('name', 'Felix');

  return user.get('id');

}

好,這里想說明下findRecord這個方法的一些局限性:

  • 只能找到第一條匹配的record
  • 當前的store如果是被filter過的,則只能在被filter的數據集中去查找匹配的record,而不是最初的store

此外findRecord這個方法有幾個參數,這里務必得說明:

  1. fieldName (必選) : 需要作為查詢條件的field name
  2. value(必選): 查詢的值,與fieldName匹配
  3. startIndex(可選):從store的哪個位置開始查詢, 默認值是0
  4. anyMatch(可選): 默認是從第一個字符開始匹配,類似SQL中的‘a%’, 如果設置為True,則是全匹配,類似SQL中的‘%a%’,默認值是false
  5. caseSensitive(可選): 設置為true則開啟大小寫敏感, 默認值是false
  6. exactMacth(可選): 設置為True是精確查詢, 默認是false  (^ and $ characters added to the regex).

針對最后一個參數exactMacth值得注意,如果有個store數據為[['145', 'PO'], ['245', 'SO'], ['1', 'SI']], model為{fieldOid, fieldName}.

這時的需求是要找到fieldOid為1的record的filedName值(正確結果是SI才對)

var field = fieldStore.findRecord('fieldOid', '1');

var fieldName = field.get('fieldName');

我們覺得這樣應該沒問題,可以得到SI這個值,可是結果卻是PO,why?

之前發現網上有文章 http://www.2cto.com/kf/201306/218487.html 說這是EXTJS的一個bug,我想應該不是。

 

因為value這個查詢是通過正則表達式來做的,所以當1作為value傳進去的時候,API用類似SQL ‘a%’表達式做查詢,當然145被找到,所以返回的結果是PO。

所以為了精確的查詢所要的記錄,則需要下面的查詢:

var field = fieldStore.findRecord('fieldOid', '1', 0, false, false, true);

var fieldName = field.get('fieldName');

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM