Próbuję wygenerować adres URL Flickr na podstawie wywołania interfejsu API Flickr, a następnie zwrócić ten wynik do szablonu handlebars.js. Staram się znaleźć sposób na asynchroniczne procesy.Meteor - powrót funkcji asynchronicznej do szablonu kierownicy?
Próbowałem utworzyć funkcję wywołania zwrotnego, ale nadal nie jestem pewien, jak uzyskać zdefiniowany obiekt lub zmienną w szablonie HTML.
Oto kod dla funkcji Flickr API:
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();
}
});};
Mój kod szablonu jest taka:
Template.backgroundImage.background = function(){
FlickrRandomPhotoFromSet(setID,function(){
return FlickrObject;
});
};
Ale to wciąż pozostawia mnie zatrzymany, nie jest w stanie uzyskać określony obiekt do mojego HTML, który jest zakodowany jako takie:
<template name="backgroundImage">
<div id="background">
{{random}}
</div>
Dzięki za pomoc. Postanowiłem wyeliminować obiekt Flickr (który był czystą próbą odebrania zmiennej z funkcji) i przekazałem adres URL bezpośrednio do obiektu Session z funkcji. Skrypt szablonu Template.backgroundImage.background zwraca teraz plik Session.get. Wszystko teraz działa zgodnie z przeznaczeniem, z wyjątkiem tego, że adres URL jest zwracany w podwójnych cudzysłowach, a ja jeszcze nie wymyśliłem, jak to wyeliminować ...! – shongololo
Możesz użyć czegoś takiego jak '/" ([^ "] +)"/i.exec (FlickrObject) [1] 'zamiast' FlickrObject' podczas ustawiania skrótu sesji.} Użyłem 'FlickrObject', ale możesz zmienić jego nazwę do tego, co masz, wyrażenie jest wyrażeniem wyrażenia regularnego, które pozbywa się enkapsulacji podwójnych cudzysłowów – Akshat