J'ai juste pris mon directive de tirer dans 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>
Je suis également en utilisant un Plugin jQuery appelé DataTables. L'usage général de il est comme ceci: $('table#some_id').dataTable(). Vous pouvez passer dans les données JSON dans le dataTable() appel de 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 suis en train de faire celui-ci, ayant les lignes déjà sur la page HTML.
Mais le problème c'est que je dois appeler la dataTable() sur le tableau n ° line_items APRÈS DOM prêt. Mon directive ci-dessus appelle la dataTable() la méthode AVANT le modèle est annexé à la directive de l'élément. Est-il possible que je peux appeler des fonctions APRÈS l'ajouter?
Merci pour votre aide!
Mise à JOUR 1 après Andy réponse:
Je veux faire en sorte que le lien de la méthode n'est seulement appelée APRÈS, tout est sur la page donc j'ai 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 ne m'en fait voir "bouh" dans le div#sayboo.
Alors je tente ma jquery datatables appel
.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, il y
Ensuite, j'ai essayer d'ajouter du temps :
.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 qui fonctionne. Donc, je me demande ce qui ne va pas dans le non-minuterie version du code?