2013-05-19 14 views
6

Flickr API çağrısına dayalı bir Flickr url oluşturmaya çalışıyorum ve bu sonucu bir handlebars.js şablonuna döndürüyorum. Eşzamansız süreçlerin etrafında bir yol bulmaya çalışıyorum.Meteor - asenkron işlevi gidon şablonuna döndürür?

Geri arama işlevi oluşturmaya çalıştım ancak tanımlanmış bir nesne veya değişkeni HTML şablonuna nasıl alacağımı hala belirsiz.

var FlickrRandomPhotoFromSet = function(setID,callback){ 
Meteor.http.call("GET","http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key="+apiKey+"&photoset_id="+setID+"&format=json&nojsoncallback=1",function (error, result) { 
    if (result.statusCode === 200) 
    var photoResult = JSON.parse(result.content); 
    var photoCount = photoResult.photoset.total; 
    var randomPhoto = Math.floor((Math.random()*photoCount)+1); 
    var selectedPhoto = photoResult.photoset.photo[randomPhoto]; 
    var imageURL = "<img src=http://farm"+selectedPhoto.farm+".staticflickr.com/"+selectedPhoto.server+"/"+selectedPhoto.id+"_"+selectedPhoto.secret+"_b.jpg/>"; 
    FlickrObject.random = imageURL; 
    } 
    if (callback && typeof(callback)==="function") { 
     callback(); 
    } 
});}; 

Benim şablon kodu şudur: Burada

Flickr API işlevi kodudur

Template.backgroundImage.background = function(){ 
    FlickrRandomPhotoFromSet(setID,function(){ 
     return FlickrObject; 
    }); 
}; 

Ama bu hala beni, sıkışmış değil içine tanımlanmış bir nesne elde edebilmek bırakır benim gibi kodlanmış HTML,:

<template name="backgroundImage"> 
<div id="background"> 
    {{random}} 
</div> 

cevap

10

Aracı olarak Session kullanın. Şablon FlickrRandomPhotoFromSet çalıştırmak için oluşturulduğunda

Template.backgroundImage.background = function(){ 
    return Session.get("FlickrObject"); 
}; 

Template.backgroundImage.created = function() { 
    FlickrRandomPhotoFromSet(setID,function(){ 
     Session.set("FlickrObject", FlickrObject) 
    }); 
} 

Yani created yöntemi idare edilecek, sonuç o ayarlayacaktır döndürülür: en kısa sürede kendi set olarak yeni verilerle şablon değişecek böylece reaktif Sonuç karma, sonuç alındığı anda arka planı belirleyecektir.

FlickrRandomPhotoFromSet numaralı telefon numaranıza dikkat edin, FlickrObject için geri bildirime geçmek için bir argümanınız olduğunu fark etmedim.

+0

Yardımlarınız için teşekkürler. Flickr nesnesini ortadan kaldırmaya karar verdim (bu yalnızca değişkeni işlevin dışına çıkarmak için bir girişimdi) ve URL'yi doğrudan işlevin içinden Session nesnesine aktardım. Template.backgroundImage.background şablon komut dosyası, şimdi Session.get dosyasını döndürür. Artık her şey, URL'nin yinelenen tırnak işaretleriyle döndürülmesi haricinde çalışıyor ve henüz nasıl ortadan kaldırılacağını henüz çözemedim ...! – shongololo

+1

Oturum karma ayarını yaptığınızda 'FlickrObject' yerine'/"([^"] +) "/ i.exec (FlickrObject) [1]' gibi bir şey kullanabilirsiniz. FlickrObject' kullandım ama yeniden adlandırabilirsiniz. sahip olduğunuz her şeye, ifade kapsülleyici çift tırnaklardan kurtulan bir regexp ifadesidir. – Akshat