2016-08-09 75 views
0

如何在模板呈現函數內的匿名函數中使用反應模板變量(來自Template.data)? (我想保持它的反應)。 流星 - 在匿名函數中使用反應變量

Template.templateName.rendered = function() { 
    function testFunction(){ 
     //Log the field 'title' associated with the current template 
     console.log(this.data.title); 
    } 
}); 

回答

0

什麼工作對我來說是使用自動運行(),並使用Template.currentData()從自動運行()內搶值簡單:

let title; 

Template.templateName.rendered = function() { 
    this.autorun(function(){ 
     title = Template.currentData().title; 
    }); 

    function testFunction(){ 
     console.log(title); 
    } 
}); 
-1
Template.templateName.onRendered(function(){ 
    console.log(this.data.title); 
}); 
+0

點是變量在匿名函數可用於* *內的onRender函數 – jetlej

0

不知道正是你正在嘗試做的(如打印this.data.title每當它改變?),但你應該:

  1. 使用Reactive variable(添加reactive-var包,然後創建a var myVar = new ReactiveVar()
  2. 如有必要,請使用Tracker.autorun(或this.autorun在模板創建/呈現事件中)包裝您的功能。

所以你可以有這樣的:

父模板HTML:

<template name="parentTemplateName"> 
    {{> templateName title=myReactiveVar}} 
</template> 

父模板JS:

Template.parentTemplateName.helpers({ 
    myReactiveVar: function() { 
    return new ReactiveVar("My Title!"); 
    } 
}); 

模板JS:

Template.templateName.onRendered(function() { 
    // Re-run whenever a ReactiveVar in the function block changes. 
    this.autorun(function() { 
    //Print the field 'title' associated with the current template 
    console.log(getValue(this.data.title)); 
    }); 
}); 

function getValue(variable) { 
    return (variable instanceof ReactiveVar) ? variable.get() : variable; 
} 
+0

我試圖在匿名函數中使用Template.data中的標題字段,並保持其反應。我不需要在頁面上打印它,所以不需要幫手。更新我的問題,使其更清楚。謝謝! – jetlej

+0

默認情況下,您知道數據上下文(即template.data)是[非響應](http://docs.meteor.com/api/templates.html#Blaze-TemplateInstance-data)。這就是爲什麼我上面顯示你必須明確使用'ReactiveVar'。這就是爲什麼我使用了一個幫手,但只是叫它。不管你喜歡,你都可以創建你的數據上下文。 – ghybs

+0

在自動運行中使用'this'的FYI似乎並不涉及模板。我不得不使用Template.currentData()從自動運行中獲取數據。 – jetlej