如何使用blaze-layout渲染将数据传递给模板?

时间:2016-11-28 09:46:34

标签: meteor meteor-blaze kadira

我尝试使用以下代码将数据传递到模板并在onCreated()中接收,但我无法访问数据。

deviceInfo.js:
BlazeLayout.render('layout',{main:'deviceInfo',stats:'paramstats',attr:"SOME_DATA"});

deviceInfo.html:
{{>Template.dynamic template=stats data=attr}}

paramstats.js:
Template.paramstats.onCreated( () => {
    console.log("onCreated");
    console.log("Data is:",this.data.attr);
});

但我得TypeError: Cannot read property 'attr' of undefined。 我哪里错了?

3 个答案:

答案 0 :(得分:1)

您需要使用onCreated回调的常规函数​​语法。箭头函数会自动将函数的上下文绑定到外部作用域,这是导致问题的原因。试试这个:

Template.paramstats.onCreated(function() {
    console.log("onCreated");
    console.log("Data is:",this.data.attr);
});

答案 1 :(得分:1)

我正在使用Meteor 1.4。#我可以像这样检索参数:

BlazeLayout.render("page", { 
    params: ['fullscreen', 'route']
});

// page.js

Template.page.onCreated(function() {
    let params = this.data.params();
    console.log(params);
}

答案 2 :(得分:0)

不太确定为什么你要使用两级间接。 BlazeLayout.render()给你一个级别,然后你在其中使用动态模板?为什么不使用BlazeLayout.render()直接呈现您最终想要的模板?

在任何情况下,您都会间接取消引用您的数据上下文。

BlazeLayout.render()来电中,您将attr变量设置为某个值。

然后在您的动态模板中,您使用的是data=attr,但这意味着您的模板助手中this的值为attr。将不会自动添加data子项。

您没有显示您为attr设置的价值,因此您的attr中只有attr个子密钥甚至不清楚变量,这也会让任何试图调试代码的人感到困惑。

@khang关于不使用onCreated()中的箭头函数语法是正确的,请尝试:

Template.paramstats.onCreated(function(){
    console.log("onCreated");
    console.log("Data is:",this);
});

this应该在attr

中填入BlazeLayout.render()的任何价值