Когда я пытаюсь использовать this.findAll в шаблоне, где селектор находится в подшаблоне, findAll ничего не возвращает.this.findAll не работает над подшаблоном
Вот HTML:
<template name="products">
{{#each productList}}
{{> product }}
{{/each}}
</template>
<template name="product">
<div class="box">{{name}}</div>
</template>
Вот JS:
Template.products.helpers({
productList: function() {
var all = Products.find({}).fetch();
return all;
}
});
Template.products.rendered = function(){
var boxes = this.findAll('.box');
console.log(boxes.length);
}
Выход boxes.length 0. Любые идеи, как я мог бы получить элементы "коробки"?
Посмотрев на фактическую страницу, я наблюдаю, что есть какая-то задержка. Консоль.log уже показывала выход, прежде чем продукты появятся на странице. Я использую железо-маршрутизатор, и я использую waitOn для продуктов. Мне нужно запустить скрипт, когда все продукты были загружены. Любые другие идеи? – ian
Это не так просто, потому что у метеор не действительно есть понятие «сделано», когда дело доходит до загрузки данных сбора. Что происходит при добавлении другого продукта? Если ответ состоит в том, чтобы снова запустить вашу функцию, я бы рекомендовал подумать о том, как использовать 'product.rendered' вместо' products.rendered'. Замечание - также стоит упомянуть, что вы всегда можете использовать '$ ('. Box')' в любой из функций, чтобы получить все поля на странице, хотя это может и не иметь смысла, если у вас есть несколько экземпляров 'products' шаблон. –
Спасибо, Дэвид! Вы дали мне идею, как ее решить. Я отправлю ответ через некоторое время. – ian