2014-02-28 93 views

回答

2

我所做的(迄今爲止)與此相同的需求是使用Grid上已更改的事件來填充控制器中$ scope的'SelectedRow'對象。對於DetailTemplate,我有一個包含指令的div,該指令從$ templateCache或使用$ http加載模板並編譯並將其鏈接到$ 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 
      }; 
    }]); 
+0

無法讓此工作。細節指令根本不起作用,不要停在任何斷點處。你的改變功能如何?你如何獲得模板文件中的數據? – Kungen

+0

加載動態模板的指令使用共享作用域,它是否從網格的父作用域獲取其數據。還有其他一些方法來處理這種情況,比如傳遞它所需的內容,我在其他指令中使用該模式,但是這需要從父範圍加載詳細視圖數據。我已經從我的代碼中刪除了這個變化事件。數據全部加載到網格綁定的數組上,所以細節視圖綁定到'dataItem.detailObject.fieldName'。 – Robharrisaz