2013-05-19 10 views
6

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> 

答えて

10

Sessionを仲介者として使用してください。テンプレートはFlickrRandomPhotoFromSetを実行するために作成されたときに

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

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

のでcreatedメソッドが実行され、その結果は、それが設定されます返されますとすぐにそのセットとして、それは新しいデータでテンプレートを変更しますので、それは反応性であり、セッションハッシュは、結果が受信されるとすぐに背景を設定します。

FlickrRandomPhotoFromSetにも注意してください。FlickrObjectがコールバックに渡す引数があります。

+0

ご協力ありがとうございます。私はFlickrオブジェクト(純粋に関数から変数を取り出そうと試みたもの)を排除することに決めました。関数内からSessionオブジェクトにURLを直接渡しました。 Template.backgroundImage.backgroundテンプレートスクリプトは、Session.getを返します。 URLが二重引用符で返され、私はまだそれを排除する方法を見つけ出していないことを除いて、すべてが意図したとおりに動作します...! – shongololo

+1

セッションハッシュを設定するときに 'FlickrObject'の代わりに'/"([^"] +) "/ i.exec(FlickrObject)[1]'のようなものを使うことができます。あなたが持っているものには、式は二重引用符を取り除く正規表​​現です – Akshat

関連する問題