渲染回调到流星大火中的所有模板

时间:2014-10-09 14:35:54

标签: meteor meteor-blaze

我被迫将渲染的回调分配给我的所有模板。

直到0.9.0我曾经这样做过:

_.each( Template, function( template, name ) {
  //...
  template.rendered = function() {
    //...
  };
});

但是现在,Template是一个构造函数而不是一个对象,所以这个方法在这里不起作用。当使用Blaze渲染所有模板时,有没有办法将回调函数传递给所有模板或fire函数?

2 个答案:

答案 0 :(得分:9)

这是我提出的一个快速解决方法,迭代每个Template属性以查明它是否与模板定义相对应,如果是,则分配onRendered回调。

// make sure this code is executed after all your templates have been defined
Meteor.startup(function(){
  for(var property in Template){
    // check if the property is actually a blaze template
    if(Blaze.isTemplate(Template[property])){
      var template=Template[property];
      // assign the template an onRendered callback who simply prints the view name
      template.onRendered(function(){
        console.log(this.view.name);
      });
    }
  }
});

我不知道您的用例是什么,因此根据它可能有更好的解决方案。

答案 1 :(得分:-4)

使用Meteor 1.2.1,Template对象具有onRendered(hook)功能,可以完成所有模板' onRendered behavior。

Template.onRendered(function(){
  var template = this;
  Deps.afterFlush(function() {
    console.log("triggering Jquery mobile component creation for "+template.view.name);
    $(template.firstNode.parentElement).trigger("create");
  });
});

Deps.afterFlush推迟更新(回调)是可选的,视您的应用需求而定。