В настоящее время я работаю с Kendo-UI и AngularJS. Я пытаюсь заставить древовидный список отображать кнопки в столбцах в соответствии с массивом dateItem.[column_name], который он получает. Я не могу создавать кнопки, в которых есть связанная директива ng-click.
В настоящее время я пытаюсь сделать следующее:
- Предопределить столбцы в угловом контроллере
- Вставьте пользовательские столбцы в существующие столбцы в соответствии с массивом, полученным ЧЕРЕЗ службу REST.
- Установите собственный шаблон для каждого столбца
- Создайте кнопки в пользовательских шаблонах в соответствии с массивом dataItem.[custom_column], содержащим директиву ng-click.
Мне трудно понять синтаксис и привязку к angular. Конечный результат этого должен иметь кнопку для каждого из элементов массива в пользовательском столбце, содержащую ng-щелчок.
Что я уже пробовал:
angular.forEach(array, function(value, key) {
var buttonArray = "dataItem."+value["column_name"];
columns.push({field: value["column_name"], template: "<span>#alert('"+buttonArray+"');#</span>"});
});
Это просто предупреждает с помощью TEXT 'dataItem.firstColumn' вместо объекта или чего-то еще. Я планировал пройтись по массиву с помощью javascript и таким образом создать кнопки, содержащие ng-click (не уверен, что это вообще сработает).
angular.forEach(array, function(value, key) {
var buttonArray = "dataItem."+value["column_name"];
columns.push({field: value["column_name"], template: "<span ng-bind-html=\"templateFunction("+buttonArray+")\"></span>"});
});
$scope.templateFunction = function(items){
var template = "";
//loop through items and create template accordingly
angular.forEach(items, function(value, key) {
//NOTE: unable to use ng-click with ng-bind-html, as it does not render the html here with angular
//perhaps needs a custom directive to enable that. However if the template renders properly (with the help of a directive), then kendo-ui will duplicate the elements with each rendering.
template += "<button kendo-button ng-click=\" test('Clicked button #"+value+"'); \">"+value+"</button>";
});
var returntemplate = $sce.trustAsHtml(template);
//trust the template as html, so it renders properly as html
return returntemplate;
};
$scope.test = function(value){ alert(value); };
Это как-то работает, массив зацикливается с правильными значениями. Проблема здесь в том, что ng-click в этих шаблонах не скомпилирован и не привязан к области, поэтому они будут работать... Обходным путем для этого было бы создание пользовательской директивы, которая компилирует html с помощью службы $compile, но потом я узнал этот древовидный список kendo-ui будет дублировать все кнопки столбца каждый раз, когда столбец сворачивается/расширяется.
По сути, я пытаюсь создать кнопки с помощью ng-click в столбцах древовидного списка kendo-ui в соответствии с массивом в dataItem.columnName (и имя столбца получается через внешний ресурс REST).