如何在Meteor中手动渲染模板?

时间:2015-06-11 20:42:52

标签: meteor

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");
    }
  });
};

2 个答案:

答案 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");
    }
  });
};