2012-03-02 5 views
0

私はExtjs 4.07を使っている初心者です。私はコンボボックス(リモート)のqueryModeを作成しました。コンボボックスにはコースリストが表示されます。しかし、私が最近取り組んでいる教育機関は、すべてのコースを記録しました。だから、私は同じ表示フィールドを持つ2つのレコードを持つことになります。 JSONは次のようになります。Extjs Comobobox重複表示フィールドは設定できませんか?

{"result":[{"id":"90223","code":"CM12","description":"Introduction to C Programming","creditHours":"3.00","numberOfLabs":"0","contactHours":null,"chargeableCredits":null}, 
{"id":"2094","code":"CMPS1302","description":"Introduction to C Programming","creditHours":"3.00","numberOfLabs":"0","contactHours":null,"chargeableCredits":null}],"total":2} 

表示フィールドは説明で、値フィールドはidです。私がコンボボックス内のアイテムの1つを選択して、すべてをうまく送信すると、うまく動作します。問題は、後で私が間違ったコースを選択し、他のコースを選択した場合に発生します。

私はidProperty: 'id'を設定しようとしましたが、無駄です。フォームを送信すると、送信される値は最初に選択された値になります。注:これはコースの説明が重複している場合にのみ発生し、それ以外はうまく動作します。

Ext.define('SIS.model.ManageCourse', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'code', type: 'string'}, 
     {name: 'description', type: 'string'}, 
     {name: 'creditHours', type: 'float'}, 
     {name: 'contactHours', type: 'float'}, 
     {name: 'chargeableCredits', type: 'float'}, 
     {name: 'numberOfLabs', type: 'float'}, 
     {name: 'selected', type: 'bool'} //for update course pre-requisites 
    ] 
}); 


Ext.define('SIS.store.ClassCourse', { 
    extend: 'Ext.data.Store', 
    autoLoad: true, 
    autoSync: true, 
    model: 'SIS.model.ManageCourse', 
    pageSize: 7, 
    remoteFilter: true, 
    idProperty: 'id', 
    proxy: { 
     type: 'ajax', 
     api: { 
      read: 'course/select' 
     }, 
     reader : { 
      type : 'json', 
      root : 'result', 
      totalProperty : 'total', 
      successProperty : 'success' 
     } 
    } 
}); 

Ext.define('SIS.view.class.ClassCourseCombo', { 
    extend: 'Ext.form.ComboBox', 
    alias: 'widget.ClassCourseCombo', 
    name: 'courseId', 
    fieldLabel: 'Course', 
    store: 'ClassCourse', 
    queryMode: 'remote', 
    pageSize: 7, 
    displayField: 'description', 
    valueField: 'id', 
    allowBlank: false, 
    hideTrigger: true, 
    forceSelection: true, 
    minChars: 1, 
    lazyInit: false, 
    listConfig: { 
     getInnerTpl: function() { 
      return '<div class="combo-header">{description}</div>\ 
       <div class="combo-item">{code}</div>'; 
     } 
    } 
}); 
+0

"この問題は後で私が間違ったコースを選択してもう1つを選択した場合に発生します"という例で問題を説明できますか?混乱しています。 – Maggie

+0

Intro to Cプログラミング(CM12)を選択したかったのですが、誤ってIntro to Cプログラミング(CMPS1302)を選択しました。訂正をしても、私の最初の選択が提出されます。しかし、別のコースを選択した場合、 Software Engineerを選択し、Intro to C Programming(CMPS1302)を選択してください。 – winkie

答えて

0

これはバージョン3以降に発見されたバグです。私は解決策がCondorによって提供されたsencha forumにあります。

何emptyTextがない場合、私は結果を定義したラインに

if(val.length > 0 && val != this.emptyText && typeof this.emptyText != 'undefined') 

if(val.length > 0 && val != this.emptyText) 

を変更forceSelectionが明示的にtrueに設定した場合にもfalseに設定されたかのようにあります。小さな修正。

0

、エンドユーザーのために、少なくとも混乱され、コンボボックスで別の行に同じ表示値を持つ:ここ

は、問題を説明するためのいくつかのコードです。

fields: [ 
    { name: 'id', type: 'int' }, 
    { name: 'description', type: 'string' }, 
    { name: 'display', type: 'string', convert: function(v, r) { 
    return r.get('id') + ' ' + r.get('description'); 
    }} 
}] 

をそして、あなたのdisplayFieldとしてこのdisplayを使用:なぜあなたはこのように計算フィールドを作成しないでください。

+0

私はそれについて考えましたが、コンボを編集するときに、表示フィールドがサーバーからの結果を取得するためのクエリとして使用されるため、結果は返されません。代わりにgetInnerTplを使用してディスプレイをフォーマットすることにしました。 – winkie

+0

それでもうまくいくでしょう... – sha

関連する問題