2017-01-29 9 views
0

Я пытаюсь создать простой встроенный редактор со списком. Мне удалось создать новую строку, создав тупое обходное решение для изменения kendoComboBox, но обновление все еще не работает (если вы не измените поле с редактором по умолчанию), а также поле со списком не отображает выбранное значение.Kendo Grid встроенное редактирование с помощью настраиваемого редактора не связывает

Сетка:

$("#pseudo-category-grid").kendoGrid({ 
    dataSource: { 
     type: "json", 
     transport: { 
      // CRUD stuff.. 
     }, 
     schema: { 
      data: "Data", 
      total: "Total", 
      errors: "Errors", 
      model: { 
       id: "Id", 
       fields: { 
        PseudoCategory: {editable: true, type: "string" }, 
        PseudoCategoryId: {editable: true, type: "number" }, 
        DisplayOrder2: {editable: true, type: "number" }, 
        IncludeAllChildren: {editable: true, type: "boolean" } 
       } 
      } 
     }, 
     requestEnd: function(e) { 
      if(e.type=="update") { 
       this.read(); 
      } 
     }, 
     error: function(e) { 
      display_kendoui_grid_error(e); 
      this.cancelChanges(); 
     }, 
     pageSize: @(defaultGridPageSize), 
     serverPaging: true, 
     serverFiltering: true, 
     serverSorting: true 
    }, 
    pageable: { 
     refresh: true, 
     pageSizes: [@(gridPageSizes)] 
    }, 
    toolbar: [{ name: "create", text: "@T("Admin.Common.AddNewRecord")" }], 
    editable: { 
     confirmation: false, 
     mode: "inline" 
    }, 
    scrollable: false, 
    columns: [{ 
     field: "PseudoCategoryId", 
     title: "Pseudo Category", 
     editor: pseudoCategoryDropDownEditor, 
     template: "#:PseudoCategory#" 
    // other unrelated fields removed... 
    }, { 
     command: [{ 
      name: "edit", 
      text: { 
       edit: "@T("Admin.Common.Edit")", 
       update: "@T("Admin.Common.Update")", 
       cancel: "@T("Admin.Common.Cancel")" 
      } 
     }, { 
      name: "destroy", 
      text: "@T("Admin.Common.Delete")" 
     }], 
     width: 200 
    }] 
}); 

Собственный редактор:

function pseudoCategoryDropDownEditor(container, options) { 
    $.ajax({ 
     cache: false, 
     type: 'POST', 
     url: '@Html.Raw(Url.Action("PseudoCategoryList", "Category"))', 
     dataType: 'json', 
     data: addAntiForgeryToken(), 
     success: function (data) { 
      $('<input required data-text-field="Name" data-value-field="Id" data-bind="value:PseudoCategoryId"/>') 
       .appendTo(container) 
       .kendoComboBox({ 
        autoBind: false, 
        dataSource: data.Data, 
        dataTextField: "Name", 
        dataValueField: "Id", 
        filter: "contains", 
        change: function(e) { 
         var value = this.value(); 
         options.model.PseudoCategoryId = value; 
         for (var i = 0; i < data.Data.length; i++) { 
          if (value == data.Data[i].Id) 
           options.model.PseudoCategory = data.Data[i].Name; 
         } 
        } 
       }); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert('Failed to get pseudo categories'); 
     } 
    }); 
} 

Позвони @Html.Raw(Url.Action("PseudoCategoryList", "Category")) просто возвращает массив идентификаторов и имен в поле данных.

ответ

0

удалось заставить его работать на manually binding со списком для модели:

function pseudoCategoryDropDownEditor(container, options) { 
    $.ajax({ 
     cache: false, 
     type: 'POST', 
     url: '@Html.Raw(Url.Action("PseudoCategoryList", "Category"))', 
     dataType: 'json', 
     data: addAntiForgeryToken(), 
     success: function (data) { 
      var elem = $('<input required data-text-field="Name" data-value-field="Id" data-bind="value:PseudoCategoryId"/>') 
       .appendTo(container) 
       .kendoComboBox({ 
        autoBind: false, 
        dataSource: data.Data, 
        filter: "contains" 
       }); 
      if (options.model.PseudoCategoryId == 0) 
       options.model.PseudoCategoryId = data.Data[0].Id; 
      kendo.bind(elem, options.model); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert('Failed to get pseudo categories'); 
     } 
    }); 
}