2015-02-19 25 views
6

Bir jquery işlevi gerçekleştirmem gereken bir html gerçekleştiren bir meteor şablonum var. Şu anda, bir bağımlılık kurdum, böylece bu şablona bağlı olan veriler (nesnelerin listesi) her değiştiğinde, işlev çalışır. Yapmaya çalıştığım şeyi yapmanın en iyi yolunun bu olduğuna emin değilim, ancak her eklediğimde/sildiğimde/nesneleri yeniden düzenlediğimde bu işlevi çalıştırır, bu bir başlangıçtır.Bir işlev çalıştırılıyor Bir meteoR şablonu güncellendi

Ancak, işlev, şablon yeniden oluşturulmadan önce çalışıyor gibi görünüyor, bu yüzden önceki blok kümeleri jquery-fied olsun, ancak bu eyleme eklediğim tüm blokları almayın.

Bir şablon oluşturuldu/güncellendikten SONRA çalıştırmak için bir işlevi zorlamanın bir yolu var mı? Herhangi bir yardım çok takdir edilir!

(burada benzer soru - Meteor reactive jquery - ama herhangi cevabı yok) İşte

bazı belki-alakalı kod bitleri şunlardır:

Template.showPictures.rendered = 
    Deps.autorun() -> 
     album = Albums.findOne(Session.get("selectedAlbum")) 

     if (album) 
     pictures = album.orderedPictures() 
     MyApp.loadJQuery() 

Template.showPictures.helpers 
    pics: -> 
    MyApp.myDependency.depend() 

    album = Albums.findOne(Session.get("selectedAlbum")) 
    album.orderedPictures() 

(Neden Şablon autorun olduğunu .belirlenmiş şey? Emin değil. Bunu koymak için iyi bir yer gibi görünüyordu, ama bu benim ilk kez bağımlılıklarla uğraşıyor, bu yüzden burada tamamen tabana düşebilirim. Neyin yanlış gittiğine dair herhangi bir fikir mükemmel olurdu.)

cevap

5

(ve TrackerDeps için yeni adıdır):

<template name="things"> 
    {{#each things}} 
     {{> thing}} 
    {{/each}} 
</template> 

<template name="thing"> 
    <!-- Show the thing here... --> 
</template> 
: Ancak

Template.showPictures.rendered = 
    Tracker.autorun() -> 
     album = Albums.findOne(Session.get("selectedAlbum")) 

     if (album) 
     Tracker.afterFlush -> 
      // This will get executed when (among other things) 
      // the UI has been updated. 
      pictures = album.orderedPictures() 
      MyApp.loadJQuery() 

Meteor yol daha böyle bir şeydir

Template.things.helpers({ 
    things: function(){ 
     return Things.find() 
    } 
}) 

Template.thing.rendered = function(){ 
    // This get executed each time a new thing is rendered! 
} 
+0

Çalışıyor Bir ReactiveVar kullanıyorsunuz. – SsouLlesS

1

Ben bir şey buldum çalışır, ama yine de bir tür şey gibi görünüyor ...

Yaptığım şey bir zaman aşımıdır. Şablon/güncelleme işlemek için

Template.sitePreview.rendered =() -> 
    Deps.autorun() -> 
    album = Albums.findOne(Session.get("selectedAlbum")) 

    if (album) 
     pictures = album.orderedPictures() 
     setTimeout MyApp.loadJQuery, 500 

Şimdiye kadar, bu oldu yeterli zaman, bu nedenle JQuery tüm En son verilere çalıştırır: Yani şimdi, yerine yukarıdaki kod, var. Daha zarif bir çözüm için hala umutlu, ama bu yapacak! Bunun için Tracker.afterFlush kullanabilirsiniz

İlgili konular