在将数据返回到meteor helpers方法时,我怎么能等到ajax请求完成。
例如,
Template.item.helpers({
itemName:function () {
var user = Meteor.user();
$.when(reallyLongAjaxRequest()).done(function (a1) {
//tried using jquery when
return "Item Name should have this because it waited";
});
return " Doesnt wait at all";
}
});
我有一个reallyLongAjaxRequest()
正在运行,我希望它能继续使用我的itemName帮助程序。控制台的日志语句始终显示未定义,但这是因为ajax请求尚未完成。我没有运气时尝试使用jquery。任何想法
编辑:
我应该提一下,我在辅助功能中是有原因的。我需要呈现项目'id',以便我可以使用该参数运行ajax请求。使用被动会话是完美的,但我不知道如何在Helpers方法定义之外获取当前渲染项目?
答案 0 :(得分:5)
未命名的集合是为名称传递null
的集合。它是内存中的数据结构,不保存到数据库中。 (http://docs.meteor.com/#meteor_collection)
好的,给定一个名为“items”的Meteor集合,并希望根据项目_id对每个项目执行ajax请求,然后能够在模板中引用ajax结果,这就是我要做的:
(粗略地)
var Items = new Meteor.Collection('items');
var Results = new Meteor.Collection(null);
Items.find().observeChanges({
added: function (id) {
$.get(url, {id: id}, function (data) {
if (Results.findOne(id))
Results.update(id, {$set: {result: data}});
else
Results.insert({_id: id, result: data});
});
}
});
Template.item.itemName = function (id) {
var doc = Results.findOne(id);
if (doc)
return doc.result;
else
return "";
};
在你的html中,你需要将id传递给帮助者:
{{itemName _id}}
在定义帮助程序时,没有办法只是暂停几秒钟,以便我的ajax请求完成而不立即返回。
不,反应式编程会立即发生,但是当你有新东西时会更新。
答案 1 :(得分:1)
单独制作ajax请求,完成后,将结果存储在Session变量中。然后让模板助手返回Session变量的值。大致...
$.get(url, function (data) {
Session.set('result', data);
});
Template.item.itemName = function () {
return Session.get('result');
};
Session是一个被动数据源,因此当ajax调用的结果进入时,你的模板会自动更新。(当然你可以选择调用Session变量,我只是以“结果”为例)
答案 2 :(得分:-1)
这在MeteorJS中工作和测试> 1.3.x中
从控制台-d
将数据元素发送到服务器并使用自定义标头的POST调用示例。
meteor add http