Javascript Blaze Meteor动态实例化模板和datacontext

Javascript Blaze Meteor动态实例化模板和datacontext,javascript,meteor,meteor-blaze,Javascript,Meteor,Meteor Blaze,我使用类似于观察的功能动态地实例化事件/或数组更改的模板 为了实现这一点,我使用 //whatever event you want, eg: $(".foo").on("click", function(){ Blaze.renderWithData(Template.widgetCard, d, $(".cards").get(0)); } 这是可行的,但很明显,实例并没有绑定到任何父级的模板 因为我刚刚在div.cards上呈现了这个模板,所以我无法使用template.pare

我使用类似于观察的功能动态地实例化事件/或数组更改的模板

为了实现这一点,我使用

//whatever event you want, eg:
$(".foo").on("click", function(){
    Blaze.renderWithData(Template.widgetCard, d, $(".cards").get(0));
}
这是可行的,但很明显,实例并没有绑定到任何父级的模板

因为我刚刚在div.cards上呈现了这个模板,所以我无法使用template.parentData1来获取父数据上下文,即使这个div.cards包含在模板中

快速修复方法是设置所需的引用,在我的例子中,该引用是全局范围上对象变量父对象的datacontext,或者甚至使用Session,或者直接通过renderWithData的数据传递该上下文

你知道有没有其他的方法,更好的方法,我是说流星奇幻的方法,来达到这个目的? 这是一个好的Blaze.renderWithData用例吗

如果我不清楚或需要更多代码,请告诉我

编辑:

补充上下文信息:

我有一张d3图表,可以选择其中的一些部分。 它具有存储此选定数据部件的数组属性

Chart = function Chart(clickCb, hoverCb, leaveCb, addSelectionCb, removeSelectionCb){
  var chart = this;
  chart.selectedParts = [];
  //... code
}
在Meteor客户端上,从该图表类的外部修改Chart.selectedParts添加/删除

我们的梦想是绑定此阵列图表。选择的部分如下:

在模板上,可以执行以下操作:

<div class="row">
    <div class="large-12 columns">
        <div class="cards">
            {{#each selectedDataChart}}            
                {{> cardWidget}}
            {{/each}}
        </div>
    </div>
</div> 
这样,如果chart.selectedParts是被动的,Blaze可以自动创建或删除cardWidget模板实例,因为绑定

我试着在它上面使用manuel:reactivearray包,这有点奇怪,因为我正在用下划线对这个数组进行复杂的操作,这显然不适用于任何本机数组类型,比如reactivearray。 不起作用,但我不知道它是否应该起作用

你觉得怎么样


这个时候,我想我做的事情有点脏;我只是在添加/删除的图表元素上实例化/销毁Blaze视图。选择的部分为:Blaze.renderWithDataTemplate.widgetCard,{data:d,chart:this},$.cards.get0

这里是我如何做到这一点的

实际上,我不认为使用Blaze.renderWithData是一个好的解决方案

我发现最好的方法是在反应模式下传递数据,能够使用所有模板功能,并继续使用空格键实例化模板。类似于父数据上下文链接

拥有反应式数据源的最简单方法是始终将您的数据与您的Mongo相匹配,因此我不必声明一个自定义的反应式数据源,这可能会使复杂js数据结构中的复杂数据变得棘手

如果有人有同样的问题,我很确定这是因为你没有按照我的情况去做

始终将DB更新为反应式数据源的一个缺点是,您正在进行大量的UI状态更改,而且毕竟要保存更改。在这种情况下,总是经过DB是非常无用的,但这远不是最快的解决方案


问我你是否有类似的问题理解哲学/方法,我开始理解我在做什么了

这里是我如何做到这一点的

实际上,我不认为使用Blaze.renderWithData是一个好的解决方案

我发现最好的方法是在反应模式下传递数据,能够使用所有模板功能,并继续使用空格键实例化模板。类似于父数据上下文链接

拥有反应式数据源的最简单方法是始终将您的数据与您的Mongo相匹配,因此我不必声明一个自定义的反应式数据源,这可能会使复杂js数据结构中的复杂数据变得棘手

如果有人有同样的问题,我很确定这是因为你没有按照我的情况去做

始终将DB更新为反应式数据源的一个缺点是,您正在进行大量的UI状态更改,而且毕竟要保存更改。在这种情况下,总是经过DB是非常无用的,但这远不是最快的解决方案


问我你是否有类似的问题理解哲学/方法,我开始理解我在做什么了

我觉得需要更多的代码。在我看来,我觉得在这种情况下,你需要一个反应式var触发onClick来加载widgetCard模板……是的,我很确定反应式var应该是一个好方法,但事情稍微复杂一点。我将编辑问题的更多细节,以向您展示。我觉得需要更多的代码。在我看来,我觉得在这种情况下,你需要一个反应式var触发onClick来加载widgetCard模板……是的,我很确定反应式var应该是一个好方法,但事情稍微复杂一点。我将对问题进行更详细的编辑以向您展示。
<div class="row">
    <div class="large-12 columns">
        <div class="cards">
            {{#each selectedDataChart}}            
                {{> cardWidget}}
            {{/each}}
        </div>
    </div>
</div>