Я динамически стимулирующий шаблон для изменения событий/или массивов (с функцией наблюдения).Blaze Meteor динамически instanciate шаблон и 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
является включить в шаблон.
Быстрое исправление будет заключаться в том, чтобы установить нужный ссылочный объект (который в моем случае является объектом) переменной datacontext переменной parent в глобальную область или даже использовать сеанс или напрямую передать этот контекст через данные renderWithData.
Знаете ли вы какой-либо другой способ, даже лучше правильный (я имею в виду Метеор фантазии), чтобы достичь этого? Хорошо ли Blaze.renderWithData
прецедент?
Сообщите мне, если я неясен или нужен еще код.
EDIT:
Дополнительная информация контекст:
Я диаграммы (d3), где можно выбрать несколько частей. У него есть свойство массива для хранения этой выбранной части данных.
Chart = function Chart(clickCb, hoverCb, leaveCb, addSelectionCb, removeSelectionCb){
var chart = this;
chart.selectedParts = [];
//... code
}
С внешней стороны этой диаграммы класса (так на стороне клиента Метеор), то 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, который, очевидно, не работает с не-родным типом массива, таким как reactiveArray). Не работает, но я не знаю, должно ли оно работать.
Как вы думаете?
В это время я делаю вещи немного грязно, я полагаю; I juste instanciate/destroying Blaze View на элемент добавлен/удален chart.selectedParts
as: Blaze.renderWithData(Template.widgetCard, {data: d, chart: this}, $(".cards").get(0));
Я чувствую, что требуется больше кода. В моей голове я чувствую, что это будет случай, когда вы хотите, чтобы реактивный var активировал onClick, чтобы сделать загрузку шаблона widgetCard ... –
Да, я уверен, что реактивный вар должен быть хорошим, но все мало бит более сложный. Я отредактирую вопрос более подробно, чтобы показать вам. –