Właśnie otrzymałem dyrektywę, aby pobrać szablon, aby dołączyć do jego elementu w następujący sposób:
# 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>
Używam również wtyczki jQuery o nazwie DataTables. Jego ogólne użycie jest takie: $ ('table # some_id'). DataTable (). Możesz przekazać dane JSON do wywołania dataTable (), aby dostarczyć dane tabeli LUB możesz mieć dane już na stronie i zrobi resztę .. Robię to drugie, mając wiersze już na stronie HTML .
Ale problem polega na tym, że muszę wywołać funkcję dataTable () w tabeli # line_items PO gotowym DOM. Moja dyrektywa powyżej wywołuje metodę dataTable () ZANIM szablon zostanie dołączony do elementu dyrektywy. Czy istnieje sposób, w jaki mogę wywoływać funkcje PO dołączeniu?
Dziękuję za pomoc!
UPDATE 1 po odpowiedzi Andy'ego:
Chcę się upewnić, że metoda linku zostanie wywołana tylko PO tym, jak wszystko jest na stronie, więc zmieniłem dyrektywę na krótki test:
# 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>"
}
I rzeczywiście widzę „boo” w div # sayboo.
Następnie próbuję wywołać jquery datatable
.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') %>"
}
Nie ma szczęścia
Następnie próbuję dodać limit czasu:
.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') %>"
}
I to działa. Więc zastanawiam się, co poszło nie tak w wersji kodu bez timera?