ฉันเพิ่งได้รับคำสั่งให้ดึงเทมเพลตเพื่อผนวกเข้ากับองค์ประกอบดังนี้:
# 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 หลังจาก DOM พร้อมแล้ว คำสั่งของฉันด้านบนเรียกเมธอด dataTable () ก่อนที่เทมเพลตจะถูกผนวกเข้ากับองค์ประกอบของคำสั่ง มีวิธีที่ฉันสามารถเรียกใช้ฟังก์ชั่นหลังจากผนวก?
ขอขอบคุณสำหรับความช่วยเหลือของคุณ!
อัปเดต 1 หลังจากคำตอบของ Andy:
ฉันต้องการตรวจสอบให้แน่ใจว่าวิธีการเชื่อมโยงเรียกว่าหลังจากทุกอย่างอยู่ในหน้าดังนั้นฉันจึงเปลี่ยนคำสั่งสำหรับการทดสอบเล็กน้อย:
# 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 แน่นอน
จากนั้นฉันก็ลองโทรหา jatery Data
.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') %>"
}
และนั่นใช้งานได้ ดังนั้นฉันสงสัยว่าเกิดอะไรขึ้นในโค้ดเวอร์ชันที่ไม่ใช่ตัวจับเวลา?