2015-06-02 5 views
0

Этот вопрос несколько схож с Meteor : wait until all templates are rendered, но я прошу его снова, так как он кажется без ответа по правде, я объясню, почему.Метеор/кладка: до тех пор, пока не будут отображены все шаблоны

, имеющий следующий код шаблона

<template name="home"> 
    <div> 
     <ul> 
      {{#each this}} 
       {{> item}} 
      {{/each}}is ready 
     </ul> 
    </div> 
</template> 

<template name="item"> 
    <li><img src="{{amz-picture-url}}"></li> 
</template> 

Я хотел бы выполнить код, как только все «пункта» являются оказываемых. Там уже многие из них, и я перепробовал много способов, как onRendered, добавить железо-маршрутизатора waitOn для домашнего шаблона, imagesLoaded функции JQuery, чтобы попытаться ждать изображений ...

Принятый ответ на предыдущий вопрос использует железо-маршрутизатор ждать, пока данные будут готовы, но мне нужны вспомогательные шаблоны, которые будут отображаться помимо готовых данных, мне нужно это, чтобы вызвать масонство.

Есть ли реальный способ использования Мансори в этой метеорной службе или мне следует изменить подход, который я использую полностью, потому что в этом контексте Мансори не будет вызван в нужный момент?

ответ

1

Вы можете добавить обработчик события onload к своему <img> s, который подсчитывает количество звонков. Как только он достигнет количества предметов, ваше завершение.

Что-то вроде:

<template name="item"> 
    <li><img src="{{amz-picture-url}}" onload="countImages()"></li> 
</template> 

Тогда в ЯШАХ:

var imageCounter = 0; 
function countImages() { 
    if(++imageCounter == this.length) { 
     // Do whatever you need 
    } 
} 
+0

В настоящее время я взлому способ, подобный этому подходу, используя как 'onRendered' на внутреннем шаблоне, так и проверку' imagesLoaded' после того, как счетчик достиг подсчета, чтобы затем вызвать масонство. UGLY. –

+0

Попробуй. Кажется менее запутанным. –

0

Ну вы не можете действительно выполнить код, когда все элементы будут загружены, так как элементы бесконечны для вашего клиента в теории. Вот почему:

Метеор использует соединение сокета, чтобы обновить его minimongo (ваш локальный mongodb в браузере) в реальном времени в фоновом режиме. Поэтому вы никогда не знаете, действительно ли у вас есть все элементы с сервера. Он по-прежнему получает обновления/удаления или новые элементы.

Чтобы устранить эту проблему, вы можете попробовать это

1.) убедитесь, что это ready Подписки на с обратным вызовом

2.) огнем функцией, если ваша готова Подписка на сосчитать ваш пункты в вашем minimongo

3.) использовать этот total_count и проверить, когда его равный количеству выставленных предметов.

КСТАТИ: убедитесь, что вам действительно нужно, это действие вызывается, когда все элементы визуализируются или есть лучше и проще решение по разделяй и властвуй вашу проблему в небольших вопросах (например, для каждого элемента)

+0

Спасибо за ваш ответ, но я больше не занимаюсь этим программным обеспечением, слава богу. –

Смежные вопросы