2013-03-12 11 views
5

Uygulamamın içinde bir yönerge kullanarak jQuery multiselect eklentisini uygulamaya çalışıyorum. İşte seçme elemanı: parties modeli $ http aracılığıyla yüklenirng seçeneklerinin DOM'ı güncellemeyi bitirdiğinde nasıl belirleyebilirim?

<select multiple 
     ng-model="data.partyIds" 
     ng-options="party.id as party.name for party in parties" 
     xs-multiselect="parties"> 
</select> 

modeli. Multiselect eklentisi, select içindeki option öğelerini ayrıştırır ve güzel çoklu seçimi oluşturur.

select öğesinin ne zaman seçeneklerle doldurulduğunu algılamanın bir yolu var mı? Bu nedenle, veriyi güncelleştirmek için çoklu veri eklentisini anlatabilir miyim?

yorumlarda bahsedildiği gibi
machineXs.directive("xsMultiselect", function() { 
    return { 
     restrict: "A", 
     require: '?ngModel', 
     link: function(scope, element, attrs, ngModel) { 
      element.multiselect().multiselectfilter(); 
      scope.$watch(scope[attrs["xsMultiselect"]], function() { 
       // I tried watching but it doesn't help 
       element.multiselect('refresh'); 
       element.multiselectfilter("updateCache"); 
      }); 
     } 
    } 
}); 
+0

$, zaman aşımı çağırarak deneyin. Bu, ng-options yönergesine, seçenekleri DOM'a çalıştırma ve ekleme şansı verebilir. –

+0

Çalışmıyor. $ Saatini doğru ayarlamış mıydım? – lucassp

+0

Bana iyi görünüyor. Tavsiyemin işe yarayıp yaramayacağından emin değildim. Açısal işlem tamamlandığında açısal sinyal vermenin hiçbir yolu yoktur. Bazen $ timeout çalışır, ancak her zaman değil. –

cevap

5

, saat DOM ngOptions günceller zaman vs tetikler zaman

scope.$watch(attrs.xsMultiselect, ...) 

emin değilim kullanın:

İşte benim direktif bu. Saatin çok erken tetiklendiğini fark ederseniz, $evalAsync() veya $ timeout() kullanmayı deneyebilirsiniz. $ evalAsync daha sonra, ancak DOM işlenmeden önce yürütülür. DOM işlendikten sonra $ timeout() daha sonra yürütülür.

scope.$watch(attrs.xsMultiselect, function() { 
    scope.$evalAsync(function() { 
     element.multiselect('refresh'); 
     element.multiselectfilter("updateCache"); 
    }); 
}); 

ya, DOM vermektedir sonra: - yani, bir zaman aşımı geri arama işlevi içinde multiselect şeyler koymak

senin $ saatin içinde
scope.$watch(attrs.xsMultiselect, function() { 
    $timeout(function() { 
     element.multiselect('refresh'); 
     element.multiselectfilter("updateCache"); 
    }); 
}); 
+0

Bu, Açısal 1.5.6'da çalışmıyor, güncellenen DOM'den önce tetikleniyor. Herhangi bir fikir?! – Campbeln

İlgili konular