2016-04-01 6 views
0

Я хочу условно добавить панель инструментов в свою сетку пользовательского интерфейса Kendo на основе пользовательских разрешений. Ниже приведены мои фрагменты кода:Kendo UI Grid: Как условно добавить кнопку «создать» кнопку на панели инструментов динамически

<div kendo-grid="ctrl.kendoGrid" id="myGrid" k-height="450" k-options="ctrl.genevaIndexSwapMappingGridOptions"></div> 

Сетка шаблон панели инструментов:

<script type="text/x-kendo-template" id="template"> 
    <div class="toolbar"> 
     <a class="k-button k-button-icontext k-grid-add" href="\#"> 
      <span class="k-icon k-add"></span> 
      Add Geneva Rate Schedule Ref Index 
     </a> 
    </div> 
</script> 

Я также попытался указать на панели инструментов в параметрах сетки, а затем переключая его видимость с помощью $(".k-grid-toolbar").hide();; но это заставляет панель инструментов отображаться в пользовательском интерфейсе, а затем исчезает, заставляя элемент управления мерцать в пользовательском интерфейсе.

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

dataBound: function() { 
    //var template = kendo.template($("#template").html()); 
    //var toobar = $("<div class='k-toolbar k-grid-toolbar k-widget'></div>").append(template); 
    //this.options.toolbar = [{ template: kendo.template($("#template").html()) }]; 
    //ctrl.genevaIndexSwapMappingGridOptions.toolbar = template; 
    }, 

Есть ли способ я могу создать и вынести панель инструментов на сетке динамически в зависимости от конкретного состояния?

Список используемых: Create another toolbar in kendo grid

EDIT: Я реализовал @ решение DontVoteMeDown, но он сломал другую функциональность. Я использую собственные редакторы для некоторых полей. Когда открывается всплывающее диалоговое окно «create», оно не может отображать пользовательские элементы управления кендо. В конфигурации колонки я указать пользовательский шаблон редактор для моих полей, как показано ниже:

{ 
    field: "RS_RefIndex_GvId", title: "Rate Schedule – Reference Index", 
    editor: function (container, options) { 
       $('<input kendo-drop-down-list data-value-primitive="true" required k-on-change="dataItem.dirty=true" k-data-source="ctrl.rateScheduleRefIndexList" ng-model="dataItem.RS_RefIndex_GvId" k-option-label="\'Select...\'" />').appendTo(container); 
      } 
}, 

Если удалить мое событие DataBound, который условно добавляет панель инструментов к сетке, и указать панель как свойство о параметрах сетки , то элементы управления отображаются правильно.

dataBound: function() { 
       if (!ctrl.isSetOptions) { 
        if (DataSvc.isUserAdmin) { 
         ctrl.isSetOptions = true; 
         ctrl.kendoGrid.setOptions({ toolbar: [{ name: 'create', text: 'Add Geneva Index Swap Mapping', }] }); 
        } 
       } 
       if (DataSvc.isUserAdmin) { 
        ctrl.kendoGrid.showColumn("CommandColumn"); 
       } 
       else { 
        ctrl.kendoGrid.hideColumn("CommandColumn"); 
       } 
      }, 

Любая помощь по этому просьба? Метод

+0

Как вы создаете сетку? с js? – raven

+0

Нет. Управление сеткой определено в разметке, а параметры сетки определены в угловом контроллере. – Lucifer

+0

Я не понимаю, почему вы хотите добавить кнопку «Создать» в этот момент, вы можете создать ее до того, как будет создана сетка (я не уверен, как вы это делаете), а затем в dataBound вы можете показать/скрыть или даже удалить кнопку, если пользователь не является администратором. – Gabriel

ответ

1

использовать решетку в setOptions() изменить параметры инициализации:

grid.data("kendoGrid").setOptions({ 
    toolbar: [{ name: "Create" }] 
}); 

Demo

+0

Я не могу использовать метод setOptions в событии dataBound или dataBinding. управление переходит в бесконечный цикл. есть ли обходной путь для этого? – Lucifer

+1

@Lucifer [возможно это] (http://dojo.telerik.com/AlAko/2) – DontVoteMeDown

+0

Это помогло, но это сломало еще одну функциональность. Я использую собственные редакторы для некоторых полей. Когда открывается всплывающее диалоговое окно «create», оно не может отображать пользовательские элементы управления кендо. Подробнее об этом в моем EDIT. – Lucifer