방금 다음과 같이 요소에 추가 할 템플릿을 가져 오는 지시문을 받았습니다.
# 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>
또한 DataTables라는 jQuery 플러그인을 사용하고 있습니다. 일반적인 사용법은 $ ( 'table # some_id'). dataTable ()과 같습니다. JSON 데이터를 dataTable () 호출에 전달하여 테이블 데이터를 제공하거나 이미 페이지에 데이터를 보유하고 나머지를 수행 할 수 있습니다. 나머지는 HTML 페이지에 이미 있습니다. .
그러나 문제는 DOM 준비 후 table # line_items의 dataTable ()을 호출해야한다는 것입니다. 위의 지시문은 템플리트가 지시문 요소에 추가되기 전에 dataTable () 메소드를 호출합니다. 추가 후에 함수를 호출 할 수있는 방법이 있습니까?
도와 주셔서 감사합니다!
Andy의 답변 후 업데이트 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에서 "boo"를 볼 수 있습니다.
그런 다음 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') %>"
}
거기에 운이 없다
그런 다음 시간 초과를 추가하려고합니다.
.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') %>"
}
그리고 그것은 작동합니다. 타이머가 아닌 버전의 코드에서 무엇이 잘못되었는지 궁금합니다.