2

我尝试使用以下代码将数据传递给模板并接收它,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。我哪里错了?

4

3 回答 3

1

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

Template.paramstats.onCreated(function() {
    console.log("onCreated");
    console.log("Data is:",this.data.attr);
});
于 2016-11-28T13:43:38.833 回答
1

我正在使用 Meteor 1.4.# 并且能够像这样检索参数:

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

// page.js

Template.page.onCreated(function() {
    let params = this.data.params();
    console.log(params);
}
于 2017-06-22T19:11:46.197 回答
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()

于 2016-11-28T18:29:17.180 回答