SORU
20 HAZİRAN 2012, ÇARŞAMBA


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
20 Mart 2014, PERŞEMBE


İ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
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LAHWF

    LAHWF

    5 Kasım 2009
  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008
  • SignatureSeries

    SignatureSer

    24 Aralık 2006