2014-04-11 14 views
5

Lütfen aşağıdaki Kısmi Görünüm'ü ve aşağıdaki denetleyiciyi dikkate alınız. Tarih seçici öğeleri üzerindeki ng değişim olayında, çağrılan işlevler, diğerinin üst veya alt sınırlarını tanımlayan değeri değiştirir.

Güncel değeri görmek için kendo datepicker'ı yeniden çizmem gerektiğini ve bunu bir yönerge içinde yapmam gerektiğini biliyorum, ancak sınırlı deneyimim beni şaşırtıyor. $ kapsamı aldım. Kapsamın güncellenmesinden sonra çağrılan $ apply() bunu yapar, ancak hile yapmaz.

Bunu Açısal olarak nasıl yaparım? Kaynak kodu baktığımızda

// Home View 
<button id="date-button" type="button" kendo-button ng-click="showModal();"> 
    Variance Analysis 
    <br /> 
</button> 
<div id="spinner" class="loading" style="display:none;"> 
    <div class="loading-dot"></div> 
    <div class="loading-dot"></div> 
    <div class="loading-dot"></div> 
    <div class="loading-dot"></div> 
</div> 

<div class="row"> 
    <br /> 
    <br /> 
    <br /> 
    <div class="col-lg-6 col-lg-offset-3"> 
     <h1>Select Two Months to Compare</h1> 
     <br /> 
     <br /> 
     <br /> 
     <div class="col-lg-6"> 
      <input kendo-date-picker ng-model="dates.fromDate" k-ng-model="dates.actualFromDate" k-options="datePicker1Options();" ng-change="setMaxDate();" /> 
     </div> 
     <div class="col-lg-6"> 
      <input kendo-date-picker ng-model="dates.untilDate" k-ng-model="dates.actualUntilDate" k-options="datePicker2Options();" ng-change="setMinDate();" /> 
     </div> 
     <div class="row"> 
      <br /> 
      <br /> 
      <br /> 
      <div class="col-lg-2 col-lg-offset-4"> 
       <button kendo-button ng-click="go();" style="width:100%;">Go</button> 
      </div> 
     </div> 
    </div> 
</div> 




// Home Controller 
app.controller('HomeCtrl', ['$scope', '$http', '$location', 'data', function ($scope, $http, $location, data) { 
    $scope.dates = {}; 
    $scope.dates.untilDate; 
    $scope.dates.fromDate; 
    $scope.dates.actualUntilDate; 
    $scope.dates.actualFromDate; 

    $scope.minDate = new kendo.data.ObservableObject({ 
     date: new Date(1970) 
    }); 

    $scope.maxDate = new kendo.data.ObservableObject({ 
     date: new Date() 
    }); 

    $scope.setMaxDate = function() { 
     var date = new Date($scope.dates.actualFromDate); 
     date.setMonth(date.getMonth() + 1); 
     $scope.maxDate.date = date; 
     // $scope.$apply(); 
    } 

    $scope.setMinDate = function() { 
     var date = new Date($scope.dates.actualUntilDate); 
     date.setMonth(date.getMonth() - 1); 
     $scope.minDate.date = date; 
     // $scope.$apply(); 
    } 


    $scope.datePicker1Options = function() { 
     return { 
      animation: { 
       close: { 
        effects: "fadeOut zoom:out", 
        duration: 300 
       }, 
       open: { 
        effects: "fadeIn zoom:in", 
        duration: 300 
       } 
      }, 
      format: "MMM yyyy", 
      start: "year", 
      depth: "year", 
      min: $scope.minDate.date 
     } 
    } 


    $scope.datePicker2Options = function() { 
     return { 
      animation: { 
       close: { 
        effects: "fadeOut zoom:out", 
        duration: 300 
       }, 
       open: { 
        effects: "fadeIn zoom:in", 
        duration: 300 
       } 
      }, 
      format: "MMM yyyy", 
      start: "year", 
      depth: "year", 
      max: $scope.maxDate.date 
     } 
    } 

    $scope.go = function() { 
     data.fetch($scope.dates.fromDate, $scope.dates.untilDate, $http, $location); 
    } 


}]); 

cevap

3

, k-rebind Eğer açısal-Kendo iki yönlü bağlamaları kullanmaz çünkü sonra ne konum, ama k-rebind sonsuz sindirmek döngüye yaptım herhangi bir test gönderme ultra arabası görünüyor ve muhafaza . Bunu yazarın elinden gelenin en iyisi.

Ayrıca, iki tarih toplayıcınız için mantıksal bir hata olduğunu düşünüyorum. Ben k-Rebind nitelik $ (uygulanır. Aslında ben $ kapsamını kullanarak bir Kendo ızgara yenilemek için çalışıyor benzer sorunlar yaşıyorum DatePicker2

+0

İlk seçim, ikincisini, seçili aydan bir ay önce seçerek sınırlar. İkincisi, ilki, ikinci seçilen aydan bir ay seçerek sınırlar. Bu mantık zaten. Tarihçinin yeni min/maks değerleriyle yeniden çizilmesini sağlamak için k-rebind kullanmanın bir örneğini gösterir misiniz? Bu konuda iyi bir belge bulamıyorum. Şerefe. – hally9k

+0

Herhangi bir doco olduğundan emin değilim, şu yorumları görün: https://github.com/kendo-labs/angular-kendo/issues/10#issuecomment-20073069 ve https://github.com/kendo-labs/angular-kendo/issues/33 # issuecomment-20264067 Ultra buggy için – morloch

+0

+1 ... – marapet

0

ait min seçeneği güncelleyecektir hangi MinDate belirlesin FromDate varsayarak) ya da ediyorum html içinde. Birincisi "Digest zaten devam ediyor" hatasını döndürüyor ve ikincisi bir şekilde bir tür bellek sorunuyla Chrome'u öldürüyor.