6
我想根據Flickr API調用生成Flickr url,然後將該結果返回給handlebars.js模板。我正在努力尋找解決異步進程的方法。流星 - 將異步函數返回給handlebar模板?
我試圖創建一個回調函數,但我仍然不確定如何獲取定義的對象或變量到HTML模板中。
這裏是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();
}
});};
我的模板代碼是這樣的:
Template.backgroundImage.background = function(){
FlickrRandomPhotoFromSet(setID,function(){
return FlickrObject;
});
};
但是,這仍然讓我卡住,沒能獲得一個定義的對象爲我HTML,其被編碼爲這樣:
<template name="backgroundImage">
<div id="background">
{{random}}
</div>
感謝您的幫助。我已經決定消除Flickr對象(這純粹是試圖從函數中獲取變量),並且我已經將該url直接從函數內部傳遞給Session對象。 Template.backgroundImage.background模板腳本現在返回Session.get。現在一切都按預期工作,除了URL是用重複的引號返回的,我還沒有想出如何消除這個...! – shongololo
當你設置會話哈希時,你可以使用'/「([^」] +)「/ i.exec(FlickrObject)[1]'而不是'FlickrObject'。我使用了'FlickrObject',但是你可以重命名它無論你擁有什麼,表達式都是一個正則表達式,可以去掉封裝的雙引號 – Akshat