2014-10-29 25 views
5

ui-grid ve 306_expandable_grid üzerinde çalışıyorum, tam kodu docda olduğu gibi kullandım ama bir hatayla ilgili bir sorunla karşılaşıyorum.306_expandable_grid - 'data' undefined özelliğini okuyamazsınız

i artı ikonuna tıkladığınızda bu hata i

TypeError: Cannot read property 'data' of undefined 
    at new <anonymous> (http://localhost/ng-Grid/resources/scripts/ui-grid-unstable.js:2883:41) 
    at Object.e [as invoke] (http://localhost/ng-Grid/resources/scripts/angular.min.js:36:456) 
    at E.instance (http://localhost/ng-Grid/resources/scripts/angular.min.js:75:118) 
    at http://localhost/ng-Grid/resources/scripts/angular.min.js:58:276 
    at r (http://localhost/ng-Grid/resources/scripts/angular.min.js:7:408) 
    at M (http://localhost/ng-Grid/resources/scripts/angular.min.js:58:260) 
    at http://localhost/ng-Grid/resources/scripts/angular.min.js:65:412 
    at http://localhost/ng-Grid/resources/scripts/angular.min.js:109:276 
    at h.$eval (http://localhost/ng-Grid/resources/scripts/angular.min.js:123:139) 
    at h.$digest (http://localhost/ng-Grid/resources/scripts/angular.min.js:120:220) 

şaşırıp hata olduğunu

<div ui-grid="row.entity.subGridOptions" style="height:150px;"></div> 

$http.get('resources/data/title2.json') 
    .success(function(data){ 

     console.log(data); 
     console.log(data[0].Data); 
     console.log(data.length); 
     for(i = 0; i < data[i].length; i++){ 
      data[i].subGridOptions = { 
        columnDefs: [ 
        {name:"Title" }, 
        {name:"Jan-10" }, 
        {name:"Feb-10"}, 
        {name:"Mar-10" }, 
        {name:"Apr-10" }, 
        {name:"May-10" }, 
        {name:"Jun-10" }, 
        {name:"Jul-10" }, 
        {name:"Aug-10" }, 
        {name:"Sep-10" }, 
        {name:"Oct-10" }, 
        {name:"Nov-10" }, 
        {name:"Dec-10" } 
       ], 
       data: data[i].Data 
      } 
     } 
     // $scope.subGridOptions.data = data; 
     $scope.gridOptions.data = data; 
     // $scope.title = data[0].Title; 
    }); 

externalHtmlFile.html app.js ... anlayabileceğim bir çözüm bulamadım. lütfen yardım

cevap

10

İlk olarak, $http.getsuccess geri arama dışında $scope.gridOptions'u başlattığınızdan emin olun. Yalnızca $scope.gridOptions.data[i].subGridOptions'u $scope.gridOptions numaralı telefona success geri bildirimi içine ekleyin. Reference:

Başarı çağrısındaki ızgara seçeneklerini tanımlayamazsınız. Bunları denetleyicinizin kapsamı üzerinde tanımlamanız ve ardından veri veya sütun tanımlarını vb. Başarı çağrısından ayarlamanız gerekir. İkinci olarak, ızgara/sayfanın denetleyicisine herhangi bir başlatma parametresine bağlı yeniden yönlendirmenin bulunmadığından emin olun. Ben çünkü sayfadaki vardı aşağıdaki kod parçasının üretilen aynı hata iletisini karşı karşıya:

if (typeof clientcode === 'string' && clientcode !== '') { 

    var payload = { 
     clientcode : storedClientcode 
    } 

} else { 

    $location.path('/'); 

} 

buradaki fikir kontrol etmek oldu storedClientcode (paylaşılan uygulama kök servisi ile) arama sayfası tarafından sağlanan eğer ve değilse, uygulama evine yönlendirin. Ama ui-grid görünüşe göre'da sayfaya ayrı alt aramalar yapar ve bu alt aramalar benim kodumla aradığım veriyi sağlamaz ve böylece yönlendirme bu çağrıların perde arkasında gerçekleşir . Hatalar (ayrıca gördüklerinizden başka) üretilmemiştir ve ızgarada hiç veri gösterilmemiştir. Bu benim anlamaya biraz zamanımı aldı (AngularJS ile oldukça yeniyim ve bu benim için ui-grid'in ilk uygulamasıydı). Umarım bu, bu soruyu çözmese bile birilerine yardımcı olur.

+0

evet, açıklama için teşekkürler efendim ... hatta angularJS için yeniyim. Neyin yanlış gittiğini anladım, yazıyorum. ColumnDefs: 'alan' argümanı: [{name: 'title', ** alan: 'title' **}, ...]; 'bana bağlamda sorun veriyordu, gibi gridoptions kapsamını tanımlamıştım Bu '$ scope.gridOptions = { expandableRowTemplate: 'externalhtmlfile.html', expandableRowHeight: 300, aggregationHideLabel: false }'. , verilerinin bağlandığı "alanını" anlamam biraz zaman aldı. –

+0

Ayrıca, 'alan', geriye dönük uyumluluk amacıyla kullanılabilen bir adtır. [API docs] (http://ui-grid.info/docs/#/api/ui.grid.class:GridOptions): "alan özelliği 2.x ile geriye dönük uyumluluk için ad yerine kullanılabilir". 'DisplayName' işlevini kullanarak, sütunun ızgaranın ızgara biçiminde nasıl değiştirileceğini değiştirebilirsiniz: '{name: 'field1', displayName: 'pretty display name'}'. – Ville

+0

Aynı sorunu yaşadım. Http.get çağrısı öncesinde gridOptions'ı verdim ve başarı bölümünün içinde scope.gridOptions {data: GET RESPONSE DATA} verdiler. – Shamseer

İlgili konular