Acabo de recibir mi directiva para extraer una plantilla para agregarla a su elemento de esta manera:
# 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>
También estoy usando un complemento jQuery llamado DataTables. El uso general de este es el siguiente: $ ('table # some_id'). DataTable (). Puede pasar los datos JSON a la llamada dataTable () para proporcionar los datos de la tabla O puede tener los datos ya en la página y hará el resto ... Estoy haciendo lo último, teniendo las filas ya en la página HTML .
Pero el problema es que tengo que llamar a dataTable () en la tabla # line_items AFTER DOM ready. Mi directiva anterior llama al método dataTable () ANTES de que la plantilla se agregue al elemento de la directiva. ¿Hay alguna manera de que pueda llamar a las funciones DESPUÉS de la adición?
¡Gracias por tu ayuda!
ACTUALIZACIÓN 1 después de la respuesta de Andy:
Quiero asegurarme de que el método de enlace solo se llame DESPUÉS de que todo esté en la página, así que modifiqué la directiva para una pequeña prueba:
# 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>"
}
Y de hecho veo "boo" en el div # sayboo.
Luego pruebo mi llamada 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') %>"
}
No hay suerte
Luego trato de agregar un tiempo de espera:
.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') %>"
}
Y eso funciona. ¿Entonces me pregunto qué sale mal en la versión sin código del temporizador?