2016-11-28 11 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 is: "、this.data.attr);'?完全なコードを含めてください – Khang

+0

私はparamstatsテンプレートを作成して呼び出しています。 –

+0

この場合、paramstatsテンプレートで必要なデータを直接取得することをお勧めします。ルートについて教えてくれるものが必要な場合は、FlowRouter.getParam()またはFlowRouter.routeを使用して、現在地を教えてくれるでしょう。完全なコード/詳細はこれを簡単に答えるでしょう:) –

答えて

1

onCreatedコールバックの通常の関数構文を使用する必要があります。矢印関数は、関数のコンテキストを自動的に外側のスコープにバインドします。これが問題の原因です。これを試してみてください:

+0

あなたのコードを試しましたが、うまくいきませんでした。 'TypeError:未定義のプロパティ 'attr'を読み取ることができません。 –

+1

' console.log(this) 'を試してください。 – Khang

+0

これは私ができることです。 'Blaze.TemplateInstance {ビュー:Blaze.View、データ:未定義、firstNode:null、lastNode:null、_allSubsReadyDep:T ... r.Dependency ...}'。 データは未定義です。 paramstatsテンプレートを参照します。 –

0

2段階の間接指定を使用する理由はわかりません。 BlazeLayout.render()はあなたに1レベルを与えていますし、その中で動的テンプレートを使用していますか? 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あなたは、私は流星1.4を使用していますあなたのBlazeLayout.render()

0

attrに詰めどのような値が必要です#私はそのようなパラメータを得ることができました:

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

// page.js 

Template.page.onCreated(function() { 
    let params = this.data.params(); 
    console.log(params); 
} 
関連する問題