Discover Meteor书籍展示了如何使用sasha:spin包来显示加载微调器模板(<template name="loading">
),同时IronRouter等待数据。
在等待常规jQuery ajax调用完成时,如何使用相同的加载模板?
var locationInfoByZipcode = function(zipcode, callback){
$.ajax({
url: "http://api.zippopotam.us/us/" + zipcode,
type: "GET",
beforeSend: function(){
// Render the loading template. I tried Blaze.render("loading") but I'm not using it right
}.
success: function(response){
// Stop the loading template.
},
error: function(){
callback("error");
}
});
};
答案 0 :(得分:0)
Blaze.render
获取模板和父级,而不是字符串,因此它是Template.loading
,然后是要渲染的父模板。您可能希望在成功回调中销毁它。
可能有点清洁的是将HTTP req放在方法中以及反应变量&amp;在点击时调用该方法。然后,您可以将加载模板保留在空格键中的#if reactiveVarIsTrue
类型内容中。只是个人偏好不使用jquery ajax调用,如果我可以帮助它,因为他们不是非常富有表现力。
答案 1 :(得分:0)
我明白了。
var locationInfoByZipcode = function(zipcode, callback){
var renderedView = {};
$.ajax({
url: "http://api.zippopotam.us/us/" + zipcode,
type: "GET",
beforeSend: function(){
// $('body')[0] is the DOM node object that .render() needs
renderedView = Blaze.render( Template.loading, $('body')[0] );
},
success: function(response){
// to remove the template you need to pass Blaze.remove() the returned value from the initial Blaze.render() call
Blaze.remove(renderedView);
callback(response);
},
error: function(){
callback("error");
}
});
};