Ext LovCommboはEditor GredPanelに使う時、紛失問題の解決を選択します.
4272 ワード
LovCoboは、Extのux拡張で提供されるプルダウン多選択コントロールです.このコントロールが編集テーブルEditoridPanelに使用されると、ドロップダウンして複数のオプションを選択すると、選択したデータが失われます.インターネットで資料を探しましたが、解決策が見つからなくて、自分で分析するしかないです.問題解決過程において、王亮は大きな支持を与えました.ここで感謝します.別作の本文はこの問題の解決方法を記録して、みんなと共有して忘れたいです. まず、問題の原因を説明します.LovCoboというコントロールは、Extの例において存在し、利用可能であるが、例としてはEditor GridPanelに使用されていないため、露出問題はない.このコントロールをEditor GridPanelに置くと、編集がフォーカスを落とし、Editor Grid上のEditorがastertValueという方法に呼び出されます.この方法はExtのコンボで、LovCommboはCommboから引き継いでいますが、この方法は上書きされていません.この方法の最後にthis.setValueを呼び出し、選択した複数のコントロールのオプションを表示名にカンマ区切りを付けてsetValueに伝えました.setValueは、カンマ区切りの表示値の文字列を認識できません.カンマ区切りのvalue文字列だけをサポートします.運転後に入ってきたパラメータは解読できないと判断し、コントロールに空の値を設定しました.選択したオプションがなくなりました. この問題を解決するには、いくつかの案があります.個人は比較的直接的なものを選んだ.コンボの中のastertValueをLovCommboに上書きする方法は、カンマ分割の表示値をsetValueに伝えないようにして、カンマ分割のvalue値に伝えます. ExtのLovCompbo類コードを修正して、中に下記のコードを入れます.
// : grid ,grideditor combobox 。 setvalue , 。
,assertValue : function(){
var val = this.getRawValue(),
rec,arr_rec,i=0;
// value , rec
var arr_val = val.split(this.separator);
var arr_value = this.value.split(this.separator);
for(;i<arr_val.length;i++){
if(this.valueField && Ext.isDefined(arr_value[i])){
rec = this.findRecord(this.valueField, arr_value[i]);
}
if(!rec || rec.get(this.displayField) != arr_val[i].trim()){
rec = this.findRecord(this.displayField, arr_val[i].trim());
}
if(rec && !arr_rec){
arr_rec = [];
}
if(rec){
arr_rec.push(rec);
}
}
if(!arr_rec && this.forceSelection){
if(val.length > 0 && val != this.emptyText){
this.el.dom.value = Ext.value(this.lastSelectionText, '');
this.applyEmptyText();
}else{
this.clearValue();
}
}else{
if(arr_rec && this.valueField){
// onSelect may have already set the value and by doing so
// set the display field properly. Let's not wipe out the
// valueField here by just sending the displayField.
if (this.value == val){
return;
}
i = 0;
val = "";
var ival;
for(;i<arr_rec.length;i++){
ival = arr_rec[i].get(this.valueField);
if(!ival){
ival = arr_rec[i].get(this.displayField);
}
if(i ==0 ){
val = ival;
}else{
val = val+","+ival;
}
}
}
this.setValue(val);
}
}
複数選択なので、まず入ってきたvalue値文字列を分離して、それぞれ彼らのrecordを見つけて、その中からvalue値を取って文字列をつづり合わせて、setValueに渡します.他の影響を与えないように、コード修正はできるだけcompboの中のastertValue方法の元のコードロジックを維持します. このコードがあればLovCoboは正常にEditor GredPanelで使用できます.本論文は著者本人がitEyeに転載したもので、原文:http://www.oecp.cn/hi/slx/blog/1168441はこの文書を提供する機構はOECPコミュニティであり、更に多くのブログ記事はOECPコミュニティまで閲覧できる.この文書の添付ファイルは皆様の転載を歓迎します.文章の作者の許可を得る前に、文章の内容や著作権情報を変更してはいけません.