War*_*arz 6 javascript ajax meteor
在将数据返回到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";
}
});
Run Code Online (Sandbox Code Playgroud)
我有一个reallyLongAjaxRequest()运行,我希望它继续我的itemName帮助程序之前完成.控制台的日志语句始终显示未定义,但这是因为ajax请求尚未完成.我没有运气时尝试使用jquery.有任何想法吗
编辑:
我应该提一下,我在辅助函数中是有原因的.我需要呈现项目'id',以便我可以使用该参数运行ajax请求.使用被动会话将是完美的,但我不知道如何获得当前渲染项目在助手方法定义之外?
未命名的集合是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 "";
};
Run Code Online (Sandbox Code Playgroud)
在您的HTML中,您需要将id传递给帮助者:
{{itemName _id}}
Run Code Online (Sandbox Code Playgroud)
在定义帮助程序时,没有办法只是暂停几秒钟,以便我的ajax请求完成而不立即返回.
不,随着反应式编程事情立即发生,但是当你有新东西时你会更新.
| 归档时间: |
|
| 查看次数: |
6794 次 |
| 最近记录: |