2015-02-05 5 views
-1

У меня есть родительский & дочерние виджеты combobox, которые инициализируются значениями. Я указываю «инициализировано значениями», потому что у меня нет проблем, когда я имею дело с родительскими дочерними виджетами &, которые инициализируются без каких-либо значений.Отмена значений дочерних виджетах кендуи, когда родительский виджет испытывает событие изменения

Вот код родительского инициализации виджета:

var jsonObj = GetSavedJSONObject(key); 
     var value = (jsonObj) ? '' + jsonObj.Id : ''; 
     var text = (jsonObj) ? '' + jsonObj.Name : ''; 
     $("#" + key).kendoComboBox({ 
      placeholder: placeholder, 
      dataTextField: dataText, 
      dataValueField: dataValue, 
      filter: "contains", 
      autoBind: false, 
      enable: canEditAll, 
      dataSource: { 
       type: "jsonp", 
       transport: { 
        read: { 
         url: urlValue, 
         type: "POST" 
        } 
       }, 
       error: function (e) { 
        console.log(e); 
       } 
      }, 
      value : value, 
      text : text, 
      select: selectEvent, 
      change: changeEvent 
     }); 

Вот код ребенка инициализации виджета:

var jsonObj = GetSavedJSONObject(key); 
     var value = (jsonObj) ? '' + jsonObj.Id : ''; 
     var text = (jsonObj) ? '' + jsonObj.Name : ''; 
     $("#" + key).kendoComboBox({ 
      placeholder: placeholder, 
      cascadeFrom: cascadeFromId, 
      dataTextField: dataText, 
      dataValueField: dataValue, 
      filter: "contains", 
      autoBind: false, 
      delay: 300, 
      enable: canEditAll, 
      dataSource: { 
       type: "jsonp", 
       serverFiltering: true, 
       transport: { 
        read: { 
         url: urlValue, 
         data: getRateTypeSelected, 
         type: "POST" 
        } 
       }, 
       error: function(e) { 
        console.log(e); 
       } 
      }, 
      value : value, 
      text : text, 
      select: selectEvent2, 
      change: changeEvent2 
     }); 

В родителя «s выберите событие, я делаю это:

var childCombobox = $("#childWidget").data("kendoComboBox"); 
      if (childCombobox) { 
       //setting parent value here 
       e.sender.value(dataItem.Id); 
       //should unset/clear the child widget per docs 
       childCombobox.value(null); 
       childCombobox.dataSource.read(); 
       if ($"#parentWidget").val()){ 
        childCombobox.enable(true); 
       }else{ 
        childCombobox.enable(false); 
       } 
       console.log(childCombobox.value()); 
       console.log(childCombobox.text()); 
       console.log(childCombobox.input.val()); 
       console.log($("#childWidget").val()); 
       console.log(childCombobox); 
      } 

Из документации, которую я видел , делая это:

combobox .value(null); 

должно быть достаточно, чтобы очистить выбор от дочернего виджета. Распечатки на консоли во время выполнения показывают, что значения «". Однако в пользовательском интерфейсе я все еще вижу старые значения дочернего виджета. Поэтому, если старый dataText дочернего виджета был «Tokyo» с dataValue из 3, я бы увидел, что значение «3» отображается в дочернем виджетах. Любые моменты будут с благодарностью оценены.

+0

Если каскадное свойство установлено, то $ ("# ребенок") значение (""); и $ ("# child") .. trigger ('change'); должно быть все, что вам нужно. –

+0

so.. проблема решена? –

ответ

0

Согласно документации Выбор события:

«Это событие не срабатывает, когда элемент выбран программно»

Они говорят, что использовать событие Cascade:

«Уволен когда значение виджета изменяется с помощью API или взаимодействия с пользователем.»

http://docs.telerik.com/kendo-ui/api/javascript/ui/combobox#events-cascade