我尝试使用以下代码将数据传递到模板并在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
。
我哪里错了?
答案 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()
的任何价值