Я щойно отримав мою директиву витягнути шаблон для додавання до його елемента на зразок цього:
# 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>
Я також використовую плагін jQuery під назвою DataTables. Загальне його використання виглядає так: $ ('table # some_id'). DataTable (). Ви можете передати дані JSON у виклик dataTable () для надання даних таблиці АБО ви можете мати дані вже на сторінці, і це зробить все інше. Я роблю останнє, маючи рядки вже на сторінці HTML .
Але проблема полягає в тому, що я повинен викликати таблицю даних () у таблиці # line_items ПІСЛЯ DOM готової. У моїй директиві вище виклик методу dataTable () ДО ПЕРЕД шаблон, доданий до елемента директиви. Чи є спосіб я викликати функції ПІСЛЯ додавання?
Дякую за твою допомогу!
ОНОВЛЕННЯ 1 після відповіді Енді:
Я хочу переконатися, що метод посилань викликається лише ПІСЛЯ все на сторінці, тому я змінив директиву для невеликого тесту:
# 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>"
}
І я дійсно бачу "бу" у div # sayboo.
Потім я спробую свій дзвінок з даних, що передається jquery
.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') %>"
}
Не щастить там
Потім я намагаюся додати тайм-аут:
.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') %>"
}
І це працює. Тож мені цікаво, що піде не так у нетаймерній версії коду?