2012-01-12 15 views
2

私はExtJSグリッドを持っています。私はコンボボックスでRoweditorプラグインを使用しています。グリッドの行をクリックすると、「更新とキャンセル」ボタンがあるエディタが表示されます。コンボが正しく動作しないRoweditorを使用しているExtJS

今、私が直面している問題は、行をクリックして行エディタが有効になることです。現在表示されている値がコンボストアと一致する場合、選択されたものとして表示されますが、 。 valueFielddisplayFieldの両方の値を使用すると、その値が選択されていることがわかります。

私は画像を投稿することができないと思いますので、私はここにあなたのコードを与えている:

私はコンボのストアの両方valueFielddisplayFieldの値を使用する場合は、私が選択した値を見ることができます。私は理想的なケースであるコンボのストアに異なっdisplayFieldvalueFieldを割り当てると

editor: { 
    allowBlank: true, 
    selectOnFocus:true, 
    editable:true, 
    xtype:'combobox', 
    valueField:'id', 
    displayField:'status', 
    triggerAction:'all', 
    queryMode: 'local', 
    store:[['NOT_STARTED','NOT_STARTED'], 
      ['IN_PROGRESS','IN_PROGRESS'], 
      ['COMPLETED','COMPLETED'] 
    ], 
    value:0, 
    lazyRender: true 
} 

、それは選択された私を示していません。

editor: { 
    allowBlank: true, 
    selectOnFocus:true, 
    editable:true, 
    xtype:'combobox', 
    valueField:'id', 
    displayField:'status', 
    triggerAction:'all', 
    queryMode: 'local', 
    store:[['1','NOT_STARTED'], 
      ['2','IN_PROGRESS'], 
      ['3','COMPLETED'] 
    ], 
    value:0, 
    lazyRender: true 
} 

どうか私に教えてください。あなたが提案として返信用


こんにちはおかげで、私は変更を行っているが、何とかそれは私のために動作しませんでした。コードはこちらです。私の店は、「現在表示されている値は、コンボストアと一致している場合は、選択して、その後、 それが表示されるはずですが、ことを示していない」

var data = { 
      root: [ 
               { 
                "objectType":"com.yagna.common.domain.Project", 
                "objectId":"3072", 
                "expectedEndDate":"", 
                "startDate":"2011-06-27 13:06:00.0", 
                "name":"Milestone-11", 
                "actualEndDate":"", 
                "id":"4376", 
                "Status":"NOT_STARTED" 
               }] }; 

                        my Column is 

{id: 'Status',width: 20,text: 'Status',dataIndex: 'Status',filter: {type: 'combobox'},sortable: true, groupable: false, 
     editor:{ 
       allowBlank: true, 
       xtype:'combobox', 
       valueField:'field1', 
       displayField:'field2', 
       triggerAction:'all', 
       mode: 'local', 
       store: [['0','NOT_STARTED'],['1','IN_PROGRESS'],['2','COMPLETED']], 
       value:0, 
       lazyRender: true 
      } }, 

                Please suggest what is missing here 

答えて

4

ある

コンボボックス」はdoesnのt一致した場合は、valueFieldの値と一致する値のdisplayFieldと一致します。

あなたのようにハードコードされたコンボボックスのデータストアは、valueFieldとして最初のアイテム(たとえば「1」)を、displayFieldとして2番目のアイテム(「NOT_STARTED」など)を自動的に取ります。

「数字」の値( '1'、 '2'、 '3')がこの列の値(「NOT_STARTED」、「IN_PROGRESS」、「COMPLETED」)と一致しないため、 。

私はこれを間違って理解していない限り、グリッド自体のデータストアには、この "ステータス"列データ(またはこの列と呼んでいるもの)を数値ではなく文字列として含むように思えます(つまり、 "NOT_STARTED"、 "IN_PROGRESS" 、1、2、3の代わりに「COMPLETED」)。

次の2つの異なることを行うことができます。

最も簡単な:はちょうどそれの数にしない文字列として値フィールドを離れます。

ハーダー:あなたは本当にこれはいくつかの(暗黙の)理由の番号にする必要がある場合:

  1. ように、あなたはグリッドデータストア内のデータを変更するすべてのデータこのため 列は、文字列の代わりに数字(1,2,3)です。
  2. この列にrendererの設定を追加すると、行がではなくが編集されているときに、数字が の適切な文字列として表示されます。
  3. 次に、データストアの設定を [number - string]オブジェクトとして試してみましょう。 あなたがそうするなら、あなたの店で引用符から番号を取ってください。

もちろん、rendererの設定をこの列に使用している場合は、単に数字を引用符で囲んでいる可能性があります。

これはすべて意味があることを願っています。

編集:ここでは

はコードです。

まず、別々のストアに状態要素を置く - そのように:

var statusStore = Ext.create('Ext.data.SimpleStore', { 
    fields: ['id', 'status'], 
    data : [ 
     ['0', 'NOT_STARTED'], 
     ['1', 'IN_PROGRESS'], 
     ['2', 'COMPLETED'] 
    ] 
}); 

第二に、あなたが望んでいた数の文字列(「0」)

var data = { 
    root: [{ 
     "objectType":"com.yagna.common.domain.Project", 
     "objectId":"3072", 
     "expectedEndDate":"", 
     "startDate":"2011-06-27 13:06:00.0", 
     "name":"Milestone-11", 
     "actualEndDate":"", 
     "id":"4376", 
     "Status":"0" 
    }] 
}; 
に「状態」の値を変更

第3に、レンダラーを列の設定に追加し、代わりに上記で作成したストア(statusStore)にエディターで指定したストアを変更します。

{ 
    id: 'Status', 
    width: 20, 
    text: 'Status', 
    dataIndex: 'Status', 
    filter: {type: 'combobox'}, 
    sortable: true, 
    groupable: false, 
    // add this renderer 
    renderer: function(value) { 
     var idx = statusStore.find('id', value) 
     var rec = statusStore.getAt(idx); 
     return rec.get('status');      
    }, 
    editor:{ 
     allowBlank: true, 
     xtype:'combobox', 
     valueField:'field1', 
     displayField:'field2', 
     triggerAction:'all', 
     mode: 'local', 
     // change this store to refer to the one we created 
     store: statusStore, 
     value:0, 
     lazyRender: true 
    } 
},  

このような場合は、左側の回答のチェックに印を付けることを忘れないでください。

+0

こんにちは返信いただきありがとうございます、私はあなたが示唆したように変更を行ったが、何とかそれは私のために働いていない。コードはこちらです。 – Anup

+0

答えに応じて、エディタを開くときにコンボを値と一致させたい場合は、 "Status"の値を数値に変更する必要があります。上記で提供したコードでは、「NOT_STARTED」は「1」になります。もちろん、それはあなたが編集モードでないときに '1'と言うでしょう。したがって、 "ステータス"カラムに "レンダラ"設定オプションを追加する必要があります。上記のコードを上に掲載します。 – Geronimo

+0

このヘルプに感謝します。これは今私のために働く – Anup

関連する問題