Ben sadece bu gibi eleman eklemek için bir şablon çekme yönergesi aldım:
# CoffeeScript
.directive 'dashboardTable', ->
controller: lineItemIndexCtrl
templateUrl: "<%= asset_path('angular/templates/line_items/dashboard_rows.html') %>"
(scope, element, attrs) ->
element.parent('table#line_items').dataTable()
console.log 'Just to make sure this is run'
# HTML
<table id="line_items">
<tbody dashboard-table>
</tbody>
</table>
Ayrıca DataTables adlı bir jQuery Eklentisi kullanıyorum. Genel kullanımı şöyledir: $ ('table # some_id'). DataTable (). Tablo verilerini sağlamak için JSON verileri dataTable () çağrısına iletebilirsiniz VEYA zaten sayfada veri olabilir ve gerisini yapacak .. Ben zaten HTML sayfasında satırları olan ikincisini yapıyorum .
Ama sorun DOM # sonra tablo # line_items dataTable () çağırmak zorunda olmasıdır. Yukarıdaki yönergem, şablon yönergenin öğesine eklenmeden ÖNCE dataTable () yöntemini çağırır. Ekten SONRA işlevleri çağırabileceğim bir yol var mı?
Yardımın için teşekkürler!
Andy'nin cevabından sonra GÜNCELLEME 1:
Ben küçük bir test için direktif değiştirdim bu yüzden link yöntemi sadece sayfadaki her şeyden SONRA çağrıldığından emin olmak istiyorum:
# CoffeeScript
#angular.module(...)
.directive 'dashboardTable', ->
{
link: (scope,element,attrs) ->
console.log 'Just to make sure this gets run'
element.find('#sayboo').html('boo')
controller: lineItemIndexCtrl
template: "<div id='sayboo'></div>"
}
Ve gerçekten div # sayboo "boo" görüyorum.
Sonra jquery datatable çağrı denemek
.directive 'dashboardTable', ->
{
link: (scope,element,attrs) ->
console.log 'Just to make sure this gets run'
element.parent('table').dataTable() # NEW LINE
controller: lineItemIndexCtrl
templateUrl: "<%= asset_path('angular/templates/line_items/dashboard_rows.html') %>"
}
Orada şans yok
Sonra bir mola eklemeyi deneyin:
.directive 'dashboardTable', ($timeout) ->
{
link: (scope,element,attrs) ->
console.log 'Just to make sure this gets run'
$timeout -> # NEW LINE
element.parent('table').dataTable()
,5000
controller: lineItemIndexCtrl
templateUrl: "<%= asset_path('angular/templates/line_items/dashboard_rows.html') %>"
}
Ve bu işe yarıyor. Kodun zamanlayıcı olmayan sürümünde neyin yanlış gittiğini merak ediyorum?