Açısal JS Direktifi için deftere işlemek bir geri arama var mı?
Benimde böyle bir öğe eklemek için bir şablon çekme talimatımı aldık:
# 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>
Ayrıca jQuery DataTable adında bir Eklenti kullanıyorum. Genel kullanımı şöyledir: ('#some_id') tablo. $() dataTable. İletebilirsiniz bulunan JSON veriyi dataTable() aramak için tedarik tablo veri VEYA verileri zaten sayfa ve idare eder.. kalan yapıyorum ikincisi, sahip satırları zaten HTML sayfası.
Ama sorun dataTable ararım yani (tablo)#line_items DOM hazır SONRA. Talimatımı yukarıdaki dataTable aramaları() şablonu ÖNCE yöntem yönergesi öğesi eklenir. SONRA fonksiyonları eklemek arayabileceğim bir yol var mı?
Yardımın için teşekkür ederim!
Andy'nin cevap sonra GÜNCELLEME 1:
Her şey küçük bir test yönergesi değiştirdim böylece sayfada SONRA bağlantı yöntemi olarak mı, sadece emin olmak istiyorum
# 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>"
}
Ve gerçekten "" div#sayboo. boo görüyorum
Sonra jquery datatable hakkımı çalışıyorum
.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') %>"
}
Hiç şans yok
Sonra ben bir süre dışarı eklemeyi deneyin :
.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') %>"
}
Ve işe yarıyor. Yanlış kod olmayan zamanlayıcı sürümünde neler acaba?
CEVAP
İkinci parametre, "" verilmezse, varsayılan davranış DOM işleme. tamamlandıktan sonra işlevi çalıştırmak için gecikme Yani setTimeout yerine, $zaman aşımı kullanın:
$timeout(function () {
//DOM has finished rendering
});
Nasıl bir setTimeout için bir parametr...
'#_=_' Dönüş için Facebook G...
Nasıl doğru erişim için `` / bu içeriğ...
Birden fazla ajax aramalar için Javasc...
jQuery / Ajax - $.() ajax Geri arama P...