Я только что получил мою директиву, чтобы вытащить шаблон для добавления к его элементу, как это:
# 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-странице.
Но проблема в том, что я должен вызвать dataTable() в таблице # line_items ПОСЛЕ ДОМА. Моя директива выше вызывает метод dataTable() ПЕРЕД добавлением шаблона к элементу директивы. Есть ли способ, которым я могу вызывать функции ПОСЛЕ добавления?
Благодарим за помощь!
ОБНОВЛЕНИЕ 1 после ответа Энди:
Я хочу убедиться, что метод link вызван только после того, как все на странице, поэтому я изменил директиву для небольшого теста:
# 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>"
}
И я действительно вижу "boo" в div # sayboo.
Затем я пытаюсь выполнить мой jquery datatable call
.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') %>"
}
И это работает. Поэтому я задаюсь вопросом, что пошло не так в версии кода без таймера?