2014-10-29 65 views
0

我如何检查所有流星佣工已经运行?流星帮手已经运行

当我使用此代码时,我得到一个新的空白div。当我从渲染函数中移除代码并从我的控制台运行它时,一切正常。

Template.CasesShow.helpers({ 
    value: function (n) { 
    if (this.data) { 
     var result = this.data.filter(function (obj) { 
     return obj.name == n; 
     }); 

     if (result && result[0]) 
     return result[0].value; 
    } 
    } 
}); 

Template.CasesShow.rendered = function() { 
    $(document).ready(function() { 
    $textarea = $('[name=1]'); 

    var content = $textarea.val().replace(/\n/g, '<br />'); 

    $textarea.replaceWith($('<div class="box">' + content + '</div>')); 
    }); 
}; 

<template name="CasesShow"> 
    <textarea class="w-input box" placeholder="{{_ 'laborauftrag.praxis'}}" name="1" data-name="1">{{value 1}}</textarea> 
</template> 

所以我觉得Meteor还没有插入数值,这很奇怪,因为它不应该运行渲染函数,对吗?

我怎样才能确保Meteor运行帮助者?

+0

textarea变量名称之前的$符号是做什么的? – 2014-10-29 16:23:52

+1

告诉我这是一个jQuery对象。想法来自这里:https://github.com/airbnb/javascript#jquery – zimt28 2014-10-29 16:27:00

+0

你可以发布你正在使用的模板的HTML。我相信'helper'会在'rendered'后面运行,因为渲染只关心模板中的基本HTML。对我来说,在你的'rendered'中注入html是很奇怪的。 – Shaded 2014-10-29 19:05:53

回答

0

Template.rendered = func将在您的模板助手之前运行一次(并且在您的路由提供数据之前很久)。你的模板不能工作,当你有Template.rendered函数,因为在你的渲染函数中,你用div替换你的textarea,并且在助手中,你返回的值已经不再存在于textarea上了(因为Template.CaseShow.rendered已经用<div>

如果你能提供什么你实际上是想在这里实现更多的细节,我们可以解决什么你现在打算流星的行为。

如果你想达到什么在div中显示你的内容,但在用<br>代替/n之后,我相信你可以通过在你的data的模板助手中执行该正则表达式。

0

放一个console.log("FIRED VALUE HELPER");并为您做相同.renderedconsole.log("TEMPLATE RENDERED");该代码将登录到您的客户端浏览器控制台。对于Chrome我右键单击浏览器并选择检查元素。然后从日志数组中选择控制台。您的客户端的js代码应该是这样的:

Template.CasesShow.helpers({ 
    value: function (n) { 
     console.log("FIRED VALUE HELPER"); 


Template.CaseShow.rendered = function() { 
    console.log("FIRED RENDERED"); 

如果你没有看到在日志中的客户端浏览器控制台,帮手/渲染功能没有被调用。