微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Meteor – 将异步功能返回到车把模板?

我试图基于Flickr API调用生成Flickr URL,然后将该结果返回到handlebars.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();
    }
});};

我的模板代码是这样的:

Template.backgroundImage.background = function(){
    FlickrRandomPhotoFromSet(setID,function(){
        return FlickrObject;
    });
};

但这仍然让我陷入困境,无法将定义的对象放入我的HTML中,其编码如下:

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

解决方法

使用Session作为中介.它是被动的,所以只要它设置它就会用新数据改变模板:
Template.backgroundImage.background = function(){
    return Session.get("FlickrObject");
};

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

因此,创建模板以运行FlickrRandomPhotoFromSet时将运行创建的方法,当返回结果时,它将设置Session哈希,而后者将在收到结果后立即设置背景.

小心你的FlickrRandomPhotoFromSet,我没注意到你有一个FlickrObject的参数传递给回调.

原文地址:https://www.jb51.cc/js/150980.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐