Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous Meteor-将异步函数返回到handlebar模板?_Asynchronous_Meteor_Handlebars.js - Fatal编程技术网

Asynchronous Meteor-将异步函数返回到handlebar模板?

Asynchronous Meteor-将异步函数返回到handlebar模板?,asynchronous,meteor,handlebars.js,Asynchronous,Meteor,Handlebars.js,我试图基于FlickrAPI调用生成一个FlickrURL,然后将结果返回到handlebar.js模板。我正在努力找到一种绕过异步进程的方法 我试图创建一个回调函数,但仍然不确定如何将定义的对象或变量放入HTML模板中 以下是Flickr API函数的代码: var FlickrRandomPhotoFromSet = function(setID,callback){ Meteor.http.call("GET","http://api.flickr.com/services/rest/?m

我试图基于FlickrAPI调用生成一个FlickrURL,然后将结果返回到handlebar.js模板。我正在努力找到一种绕过异步进程的方法

我试图创建一个回调函数,但仍然不确定如何将定义的对象或变量放入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();
    }
});};
但这仍然让我陷入困境,无法将定义的对象放入HTML中,HTML的编码如下:

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

{{random}}

使用
会话
作为中介。它是被动的,因此一旦设置,它将使用新数据更改模板:

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

Template.backgroundImage.created = function() {
    FlickrRandomPhotoFromSet(setID,function(){
        Session.set("FlickrObject", FlickrObject)
    });
}
因此,当创建模板以运行flickrandomphotofRomset时,将运行创建的
方法,当返回结果时,它将设置会话哈希,而会话哈希将在收到结果后立即设置背景


也要小心你的
FlickrAndomphotofRomset
,我没有注意到你有一个参数要求
FlickrObject
传递给回调。

谢谢你的帮助。我决定删除Flickr对象(这纯粹是为了从函数中获取变量),并将url直接从函数中传递给会话对象。Template.backgroundImage.background模板脚本现在返回Session.get。现在一切都正常了,除了URL以重复的引号返回,我还没有弄清楚如何消除这一点。。。!设置会话哈希时,可以使用类似于
/“([^”]+)”/i.exec(FlickrObject)[1]
的内容,而不是
FlickrObject
。我使用了
FlickrObject
,但您可以将其重命名为任何名称,该表达式是一个regexp表达式,可以去掉封装的双引号
Template.backgroundImage.background = function(){
    return Session.get("FlickrObject");
};

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