2016-11-28 104 views
2

我试过以下代码将数据传递到模板并在onCreated()中接收它,但我无法访问数据。如何使用blaze-layout渲染将数据传递给模板?

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。 我哪里错了?

+0

你在哪里调用'console.log(“Data是:“,this.data.attr);'?请包含完整代码 – Khang

+0

我在paramstats模板的oncreated中调用它。 –

+0

在这种情况下,最好直接在paramstats模板上提取所需的任何数据。如果你需要某些东西来告诉你路由,你可以依靠FlowRouter.getParam()或FlowRouter.route来告诉你你在哪里。完整的代码/更多细节将使这更容易回答:) –

回答

1

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

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

我试过你的代码,但没有奏效。 它说'TypeError:无法读取undefined的属性'attr'。 –

+1

尝试'console.log(this)'看看它是什么 – Khang

+0

这是我能做的最好的。 'Blaze.TemplateInstance {view:Blaze.View,data:undefined,firstNode:null,lastNode:null,_allSubsReadyDep:T ... r.Dependency ...}'。 数据未定义。它指的是paramstats模板。 –

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应该有你酿的任何值到attrBlazeLayout.render()

0

我使用流星1.4#我能够像这样重复参数:

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

// page.js 

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