how to dynamic change richselect(combo, select) options to item in datatable

edited June 2015 in Technical questions
var dlg= webix.ui({
  view: "datatable",
  id: "dt",
  width: 400,
  height: 400,
  editable: true,
  columns: [
    {id: "condition", width: 100, editor: "richselect", options: []}//"aa","bb"]}
  ]
});
var item_id=$$("dt").add({condition: ""});
$$("dt").getItem(item_id).condition.options = ["cc","dd"];

I can use similar code in normal "richselect", but can't use to change options to item in datatable

Comments

  • You can't define collection of options for each column, it can be defined only for all cells in the column

    If you need to show different options in the editor, you can use onAfterEditStart API to catch the moment when the editor is visible and update a content of the editor from this event handler.

  • got it

  • Hi maksim, Could you please provide a sample code snippet for this?
    (I'm trying to conditionally change the options of a combo when edit starts.)

  • edited March 2017

    Hi @Baga,

    Here's a quick sample

    http://webix.com/snippet/44b849f7

    But in such case, the best practice if to filter options, i.e.

    filter can be a more complex function

    list.filter(function(itemObj){
        return true; //false;
    })
    

    depending on some conditions, each item (itemObj) can be displayed or not.

    http://webix.com/snippet/b11e53c5

    Please check the related topic with more complex samples:

    http://forum.webix.com/discussion/comment/9447/#Comment_9447

  • great Thanks!

  • edited July 2018

    Спасибо за ваш пример!

    Но есть один нюанс. Если изначально инициировать опции как массив ["option1", "optinon1"] объект коллекции this.getColumnConfig(id.column).collection не создается! Соответсвенно методы clearAll() и parse() недоступны.

    https://snippet.webix.com/u4tz16kr

    А ведь в документации по API сказано что такая инициация тоже разрешается.

  • Здравствуйте @qtL5Cr ,

    Коллекция представляет собой независимое хранилище данных для конкретного столбца, в котором содержатся элементы с id/value.
    Поэтому в массиве следует указать id и value и тогда всё сработает
    https://snippet.webix.com/92fcr2a5
    Как вариант, можно не использовать clearAll и parse, а сделать немного иначе:

     on:{
        onBeforeEditStart:function(id){ 
        if (id.column == "initial"){
          this.getColumnConfig(id.column).options = ["A", "B"];
        }
      }}
    

    Пример: https://snippet.webix.com/gl959ni7

Sign In or Register to comment.