2014-11-02 83 views
1

我試圖訪問一個父母數據上下文是否有更優雅的方式來行走模板嵌套?

爲了得到它,我有一條線,看起來像: -

template.view.parentView.parentView.parentView.parentView.dataVar.curValue 

其中在UI方面,我有

模板[dataIwant]渲染另一個模板,使用autoform

然後,我使用autoform鉤子來獲取before save事件,我想用它來爲要保存的文檔添加一個額外的值。

然後,我將在鉤子中傳遞的模板放回頂層模板。似乎我應該能夠以更優雅的方式做到這一點?

+2

我希望有一個更好的方式來模板直接相互溝通。我們做的事情如下:'Blaze.getView(el).templateInstance()。someVar'其中'el'是通過類名和[parents]組合找到的DOM節點(http://api.jquery.com/parents /)。這並不優雅,但可能比了解各個模板之間精確的步數要好得多。 – 2014-11-02 07:07:44

+0

我想我可以做一個樹步行者,我可以做一些像template.getParent('mytemplate')的東西。有點希望我的問題已經存在,或類似的東西:) – 2014-11-02 20:22:14

回答

1

今天想出了這個代碼,因爲我需要它也:

_.extend(Blaze.View.prototype,{ 
    closest: function(searchedViewName){ 
    currentView = this; 
    while (currentView && currentView.name != searchedViewName){ 
     currentView = currentView.parentView; 
    } 
    return currentView; 
    } 
}); 

<template name="parent"> 
    {{> child}} 
</template> 

Template.parent.created = function(){ 
    this.reactiveVar = new ReactiveVar(false); 
}; 

<template name="child"> 
    {{parentName}} 
    {{parentVar}} 
</template> 


Template.child.helpers({ 
    parentName:function(){ 
    return Template.instance().view.closest("parent").name; 
    }, 
    parentVar:function(){ 
    return Template.instance().view.closest("parent")._templateInstance.reactiveVar.get(); 
    } 
}); 

到目前爲止好,但我已經發現使用情況下這不會在你的模板的工作(使用Template.contentBlock定義是由於某種未知的原因而破壞整個事物)。

相關問題