Meteor:如何遍历一个数组,这是一个异步方法的结果
Meteor: how to loop over an array which is the result of an asynchronous method
我有一个异步方法,它执行Facebook请求从当前登录用户那里检索照片。
我有一个模板,我可以在其中循环访问这些结果。但由于对Facebook的调用是异步的,所以它失败了。
<template name="mytemplate">
{{#if photos}}
{{> images pics=photos}}
{{/if}}
</template>
<template name="images">
{{#with pics}}
{{#each this}}
{{images}}
{{/each}}
{{/with}}
</template>
这是我的javascript:
Template.mytemplate.helpers({
photos: function () {
return Template.instance().myAsyncValue.get();
}
});
Template.mytemplate.created = function (){
var self = this;
self.myAsyncValue = new ReactiveVar("Waiting for response from server...");
Meteor.call('getPhotos', function (err, data) {
if (err)
console.log(err);
else
self.myAsyncValue.set(data.data);
});
}
我已经有一个正在监视的变量,但问题是我的模板已经创建并且结果还不是数组。
有人可以向我展示如何在模板中使用异步数组结果的最佳实践吗?我想在模板中创建图像标签,而不是使用 jquery 或 javascript。
谢谢
如果我理解正确,则在加载帮助程序时会出现错误,因为照片不是数组。试试这个:
Template.mytemplate.helpers({
photos: function () {
var val = Template.instance().myAsyncValue.get();
return val.constructor === Array && val;
}
作为附带的问题,为什么要对数组使用 ReactiveVar?我只找到了在原语上使用它们的用途,因为反应性不会进行深度扫描,但也许我错过了:)
感谢您的快速回复。
在我写完问题后,我已经发现我的问题是在尚未进行调用时没有给出实际的数组。
关于你的侧面问题。我必须使用此 ReactiveVar 来跟踪结果,不是吗?因为我的变量首先没有值。模板已在设置中。然后,当我得到响应时,值发生了变化,我的每个循环都会对收到的数组做出反应。无论如何,这就是我对这个 ReactiveVar 的理解:)
相关文章:
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 将其中一个异步方法重写为使用promise的方法
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- QtWebKit中的JavaScript和异步方法
- Node.js-异步方法调用问题
- 如何在jQuery插件中创建一个公共方法
- Meteor:如何遍历一个数组,这是一个异步方法的结果
- JavaScript中异步方法的优点是什么
- 如何将异步方法返回的值发送到javascript中的另一个异步方法
- 在执行另一个异步函数之前,只有当条件为true时,才执行某些异步函数的最佳方法
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- 将此(对象)传递到一个对象方法嵌套方法中
- 检测按下了哪个键——这是一个好方法吗
- 当使用Q/promises/异步函数时,如何将一个值从一个类方法返回到另一个类
- 从C#Windows Phone应用程序调用Javascript-这是一个好方法吗
- 在javascript中链接多个异步方法
- 从javascript调用一个jsp方法
- 是否有可能在 JavaScript 中使用异步方法进行迭代
- 如何在另一个异步`each`方法(NodeJS)内部进行异步方法调用
- 如何在angularjs中编写一个返回承诺的异步方法