Flickr API呼び出しに基づいてFlickr URLを生成し、その結果をhandlebars.jsテンプレートに戻そうとしています。私は非同期プロセスを回避する方法を見つけるのに苦労しています。Meteor - ハンドルバーテンプレートに非同期関数を返しますか?
私はコールバック関数を作成しようとしましたが、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オブジェクト(純粋に関数から変数を取り出そうと試みたもの)を排除することに決めました。関数内からSessionオブジェクトにURLを直接渡しました。 Template.backgroundImage.backgroundテンプレートスクリプトは、Session.getを返します。 URLが二重引用符で返され、私はまだそれを排除する方法を見つけ出していないことを除いて、すべてが意図したとおりに動作します...! – shongololo
セッションハッシュを設定するときに 'FlickrObject'の代わりに'/"([^"] +) "/ i.exec(FlickrObject)[1]'のようなものを使うことができます。あなたが持っているものには、式は二重引用符を取り除く正規表現です – Akshat