Je viens de recevoir ma directive pour insérer un modèle à ajouter à son élément comme ceci:
# 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>
J'utilise également un plugin jQuery appelé DataTables. Son utilisation générale est la suivante: $ ('table # some_id'). DataTable (). Vous pouvez passer les données JSON dans l'appel dataTable () pour fournir les données de la table OU vous pouvez avoir les données déjà sur la page et il fera le reste .. Je fais ce dernier, ayant les lignes déjà sur la page HTML .
Mais le problème est que je dois appeler le dataTable () sur la table # line_items APRÈS DOM prêt. Ma directive ci-dessus appelle la méthode dataTable () AVANT que le modèle ne soit ajouté à l'élément de la directive. Existe-t-il un moyen d'appeler des fonctions APRÈS l'ajout?
Merci de votre aide!
MISE À JOUR 1 après la réponse d'Andy:
Je veux m'assurer que la méthode de lien n'est appelée qu'APRÈS que tout est sur la page, j'ai donc modifié la directive pour un petit 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>"
}
Et je vois effectivement "boo" dans le div # sayboo.
Ensuite, j'essaye mon appel 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') %>"
}
Pas de chance là-bas
Ensuite, j'essaye d'ajouter un temps mort:
.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') %>"
}
Et ça marche. Je me demande donc ce qui ne va pas dans la version sans minuterie du code?