2012-01-12 7 views
2

У меня есть сетка ExtJS. И я использую плагин Rowsitor с combobox. Когда я нажимаю на любую строку сетки, я вижу редактор с кнопкой «Обновить» и «Отмена».ExtJS с использованием Rowitor с комбо не работает должным образом

Теперь проблема, с которой я столкнулась, - это когда я нажимаю на строку, и редактор строк активируется. Если отображаемое в настоящее время значение сопоставляется с хранилищем комбо, оно должно отображаться как выбранное, но оно не показывает, что , Если я использую значение как для valueField, так и для displayField, тогда я вижу его выбранным.

Я предполагаю, что я не могу отправлять изображения, так что я даю вам код здесь:

Если я использую значение как для valueField и displayField в магазине Комб, а затем я могу видеть выбранное значение.

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 
} 

Когда я задаю displayField и valueField по-разному в магазине Комбо, которая является идеальным случаем, он не показывает мне выбранный.

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

«Если отображается текущее значение сопоставляется с комбо-магазине, то он должен показать, как выбран, но не показывает, что»

выпадающий Безразлично» t соответствует значению displayField, которое соответствует значению valueField.

выпадающий датастор, который жестко, как ваш будет автоматически принимать первый элемент (например, «1») в качестве valueField и второй элемент (например, «NOT_STARTED») в качестве displayField.

Поскольку ни один из значений «числа» («1», «2», «3») не соответствует значениям в этом столбце («NOT_STARTED», «IN_PROGRESS», «COMPLETED»), он не покажет вам ничего ,

Если я не понял это неправильно, это похоже на то, что хранилище данных для самой сетки содержит эти данные столбца «статус» (или все, что вы называете этим столбцом) как строка, а не число (т.е. «NOT_STARTED», «IN_PROGRESS» , "COMPLETED" вместо 1, 2, 3).

Вы можете сделать две разные вещи:

ПРОСТОЙ: Просто оставьте поле значения в виде строки, не делают его номер.

HARDER: Если вам действительно нужно, чтобы это число для некоторой (неустановленной) причины:

  1. Вы можете изменить данные в сетке датастора так что всех в данных для этого column - это число (1,2,3) вместо строки.
  2. Добавить конфигурацию renderer в этот столбец, чтобы отобразить номера в виде соответствующих строк, когда строка не редактируется.
  3. Затем сделайте это так, как вы пытаетесь с настройкой хранилища данных, как [number - string] объектов. Кроме того, возьмите номер из кавычек в своем магазине, если вы собираетесь это сделать.

Конечно, если вы уже используете конфигурацию renderer в этом столбце, проблема может заключаться в том, что у вас есть число в кавычках.

Надеюсь, это все имеет смысл.

EDIT:

Вот код.

Во-первых, поставить элементы статуса в отдельном магазине - например, так:

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

В-третьих, добавьте рендерер в конфигурацию столбца и измените хранилище, указанное в редакторе, таким, которое мы создали выше (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

В соответствии с ответом, если вы хотите, чтобы комбо соответствовало значению при открытии редактора, вы должны изменить значение «Статус» на число. В приведенном выше коде «NOT_STARTED» должен стать «1». Конечно, это заставит его сказать «1», когда вы не находитесь в режиме редактирования. Таким образом, вам нужно добавить опцию конфигурации «renderer» в столбец «Статус». Я отправлю этот код выше в одно мгновение. – Geronimo

+0

Большое спасибо за эту помощь. Это работает для меня сейчас – Anup

Смежные вопросы