繁体   English   中英

Blaze Meteor动态实例化模板和数据上下文

[英]Blaze Meteor dynamically instanciate template and datacontext

我正在动态实例化事件/或数组更改的模板(具有类似观察的功能)。

为此,我使用

//whatever event you want, eg:
$(".foo").on("click", function(){
    Blaze.renderWithData(Template.widgetCard, d, $(".cards").get(0));
}

那是可行的,但是很显然,实例未绑定到任何父对象的模板。

因为我只是在div.cards上渲染了此模板,所以我无法使用Template.parentData(1)来获取父datacontext,即使这样div.cards也包含在模板中。

快速的解决方法是在全局范围内设置想要的引用(在我的情况下是一个对象)变量parent的datacontext,甚至使用Session,或通过renderWithData的数据直接传递此上下文。

您是否知道其他方法,甚至更好的适当方法(我的意思是流星幻想方法)来实现这一目标? 这是一个很好的Blaze.renderWithData用例吗?

告诉我是否不清楚或需要更多代码。

编辑:

补充上下文信息:

我有一个图表(d3),可以在其中选择某些部分。 它具有一个数组属性来存储此选定的数据部分。

Chart = function Chart(clickCb, hoverCb, leaveCb, addSelectionCb, removeSelectionCb){
  var chart = this;
  chart.selectedParts = [];
  //... code
}

在此Chart类之外(例如在Meteor客户端),对chart.selectedParts进行了修改(添加/删除)。

梦想是“绑定”此数组chart.selectedParts类似于:

Template.templateContainingAllThoseCards.helpers({
    selectedDataChart: function(){
        return Template.instance.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包(这有点令人讨厌,因为我正在使用Underscore在此数组上进行复杂的操作,这显然不适用于非本机数组类型,例如reactArray)。 不起作用,但是我不知道它是否应该起作用。

你怎么看?

目前,我正在做一些我想做的事情; chart.selectedParts对添加/删除的chart.selectedParts实例化/销毁Blaze视图, chart.selectedParts如下: Blaze.renderWithData(Template.widgetCard, {data: d, chart: this}, $(".cards").get(0));

所以这是我如何做到的。

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

我发现最好的方法是在“反应模式”下传递数据,以便能够使用所有模板功能,并继续使用空格键来实例化模板。 (就像父DataContext链接一样)。

具有反应式数据源的最简单方法是始终将您的数据与您的Mongo进行匹配,因此我不必声明自定义的反应式数据源(对于复杂的js数据结构中的复杂数据源可能会很棘手)。

如果有人遇到同样的问题,我很确定这是因为您没有遵循“好的”方法(我就是这种情况)。

总是将数据库更新为反应性数据源的一个缺点是,您要进行大量UI状态更改,并且毕竟要保存更改。 在这种情况下,总是绕过数据库几乎是没有用的,但这是最快的解决方案。

问我,如果您在理解哲学/做事上有任何类似的问题,我开始了解我在做什么!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM