在完成DOM之前调用流星火焰

时间:2014-05-19 08:03:06

标签: meteor meteor-blaze

我有一个模板,显示一个用户ID为的QRCode:

        <template name="pairDevice">
          {{#with currentUser}}
          <div id="qrcode"></div>
          <div class="key" id="qrcodeValue" style="display: none;">{{id}}</div>
          {{/with}}
        </template>

我尝试设置渲染值和帮助器中的值,但问题始终是$('#qrcode')$('#qrcodeValue')返回[],因为字段尚不存在。

Template.pairDevice.rendered = function(){
  if (!location.origin) {
     location.origin = location.protocol+"//"+location.host;
  }
 // $('#qrcode').qrcode({width  : 128, height :128 ,text : $('#qrcodeValue').html()});
};

Template.pairDevice.helpers({
  'id' : function(){
    var appUser =Meteor.user();
    var value = location.origin  + ";" + appUser._id + ";" + appUser.emails[0].address;
     $('#qrcode').qrcode({width  : 128, height :128 ,text : value});
    return value;
  }
});

我知道Blaze只渲染一次,但是如何在DOM完成后渲染它?

由于

1 个答案:

答案 0 :(得分:1)

{{#with currentUser}}移到模板外面。

<template name="pairDevice">
  <div id="qrcode"></div>
  <div class="key" id="qrcodeValue" style="display: none;">{{id}}</div>
</template>

<!-- call it like this -->
{{#with currentUser}}
  {{> pairDevice}}
{{/with}}

当您第一次刷新页面时,我认为currentUser在客户端使用其恢复令牌进行身份验证时会在短时间内未定义。因此,首次呈现pairDevice时,currentUser未定义,因此调用#qrcode回调时,两个div #qrcodeValuerendered不存在。通过移动模板外部,在pairDevice定义之前,currentUser模板根本不会呈现。