将Angular模板用于Kendo UI Grid详细信息模板

时间:2014-02-28 19:54:27

标签: angularjs kendo-ui kendo-grid

我正在使用Angular JS的Kendo UI包。我想对行详细信息使用Angular模板,与此处的内容非常相似:

Kendo Grid Detail Template

基本上我想在扩展细节时获取一些数据,并将角度模型传递给模板。这可能吗?

1 个答案:

答案 0 :(得分:2)

我所做的(到目前为止)同样的需求是使用Grid上的已更改事件来填充控制器中$ scope的'SelectedRow'对象。对于DetailTemplate,我有一个div,它包含一个指令,该指令从$ templateCache或使用$ http加载模板并编译它并将其链接到$ scope。模板的一个问题是编译并将它们链接到$ scope以及何时发生。 (我的问题更严重,因为我需要为每一行提供不同的详细信息模板)

                $scope.vm.options.productGridOptions = {
                dataSource: new kendo.data.DataSource({
                    data: $scope.vm.solution.Products,
                    pageSize: 10
                }),
                change: $scope.vm.events.productSelected,
                columns: $scope.vm.columns.productColumns,
                detailTemplate: '<div data-template-detail type="#= EntityTemplateSK #"></div>',
                filterable: false,
                groupable: false,
                pageable: true,
                reorderable: true,
                resizable: true,
                selectable: 'single',
                sortable: true
            };

 myApp.directive('templateDetail', ['$compile', '$http', '$templateCache', 
        function ($compile, $http, $templateCache) {
            var detailTemplateNumbers = ['21', '22', '23', '26', '45', '69'];
            var getTemplate = function (templateNumber) {
                var baseUrl = '/App/Product/Views/',
                    templateName = 'productdetail.html',
                    templateUrl = baseUrl + templateName;

                if (detailTemplateNumbers.filter(function (element) { return element === templateNumber; })[0]) {
                    templateName = 'productTemplate' + templateNumber + '.html';
                    templateUrl = baseUrl + templateName;
                }

                return $http.get(templateUrl, { cache: $templateCache });
            };

            var linker = function ($scope, element, attrs) {

                var loader = getTemplate(attrs.type.toString());

                if (loader) {
                    loader.success(function (html) {
                        element.html(html);
                    }).then(function () {
                        element.replaceWith($compile(element.html())($scope.$parent));
                    });
                }
            };

            return {
                restrict: 'A',
                scope: {
                    type: '='
                },
                link: linker
            };
    }]);