2016-11-28 106 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); 
} 
相關問題