2015-10-11 75 views
2

我有子模板附帶的父模板。我需要使用子模板的父母ReactiveVar。我可以使用Session方法,但對於我的要求Session方法不起作用。如何從父模板訪問ReactiveVar值?流星ReactiveVar從子模板訪問父tempate

HTML:

<template name="ParentTemplate"> 
    {{> ChildTemplate}} 
</template> 

<template name="ChildTemplate"> 
//Some HTML content 
</template> 

JS

Template.ParentTemplate.onCreated(function() { 
    this.myvalue = new ReactiveVar(5); //I tried this.data.myvalue but doesnt works 
}); 
Template.ChildTemplate.helpers({ 
'myhelper' : function(){ 
    return Template.parentData(1).myvalue.get(); 
} 
}); 
+0

在父模板中,將數據放在'Template.currentData()'上下文中。 – MasterAM

回答

5

這裏有一個例子是孩子家長的直系後裔:

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

<template name="child"> 
    <p>{{parentValue}}</p> 
</template> 

在這種情況下,我們可以訪問paren T公司這樣的實例變量:

Template.child.helpers({ 
    parentValue: function() { 
    var parentView = Blaze.currentView.parentView.parentView; 
    var parentInstance = parentView.templateInstance(); 
    // replace parentVariable with the name of the instance variable 
    return parentInstance.parentVariable.get(); 
    } 
}); 

如果兩個模板具有DOM中的更復雜的關係,你可以使用這樣的事情:

// replace .parent-class will the selector for your parent template 
el = $('.parent-class')[0] 
var parentInstance = Blaze.getView(el).templateInstance(); 
// replace parentVariable with the name of the instance variable 
return templateInstance.parentVariable.get(); 
+2

非常感謝。你是我的老師,他回答了我許多問題。 –

5

另一種可能的解決辦法是通過數據孩子明確。

// js 
if (Meteor.isClient) { 
    Template.parent.onCreated(function() { 
     this.reactiveV = new ReactiveVar(42); 
    }); 

    Template.parent.helpers({ 
     getReactiveVar: function() { 
      return Template.instance().reactiveV; 
     }, 
    }); 

    Template.parent.events({ 
     'click button': function(e, tmp) { 
      tmp.reactiveV.set(tmp.reactiveV.get() + 2); 
     }, 
    }); 
} 

,並在模板文件:

<template name="parent"> 
    <p>this is the parent!</p> 
    <button> var++ </button> 
    {{> child parentData=getReactiveVar}} 
</template> 


<template name="child"> 
    <h3> 
     child template 
    </h3> 
    {{parentData.get}} 
</template> 

爲你按下按鈕,你會看到孩子模板更新。如果需要,您還可以在Template.child.onCreated函數中以其他方式分配父數據。

這可能會在兩個模板之間提供失敗的耦合。