Возможен ли «Условный рендеринг» с Pure JS? - PullRequest
4 голосов
/ 20 января 2012

Я использую директивы Pure JS для рендеринга:

http://beebole.com/pure/documentation/rendering-with-directives/

Если узел в шаблоне отсутствует, по умолчанию в Pure JS происходит сбой из-за:

Узел "XXX" не найден в шаблоне

* * 1010

Это поведение по умолчанию является полностью понятным, поскольку оно гарантирует, что в шаблоне нет несоответствий. Однако в тех же случаях можно пропустить ошибочное назначение и продолжить выполнение остальных назначений (возможно, регистрируя ошибку), чтобы избежать сбоя всего процесса рендеринга из-за одной ошибки / опечатки.

Есть ли способ получить такое поведение с помощью Pure JS? Могу ли я сказать Pure JS визуализировать элемент просто «если он существует»?

1 Ответ

3 голосов
/ 17 января 2013

К сожалению, текущая стабильная версия Pure JS ( ревизия: 2.79 ) не позволяет отобразить элемент ", если он существует "?

Следующий фрагмент кода Pure показывает, как генерируется ошибка:

if(selector === '.' || ( !selector && attr ) ){
    target[0] = dom;
}else{
    target = plugins.find(dom, selector);
}
if(!target || target.length === 0){
    return error('The node "' + sel + '" was not found in the template:\n' + outerHTML(dom).replace(/\t/g,'  '));
}

Как видите, если target не было найдено (одной из библиотек, таких как jQuery, dojo и т. Д.), Тоупомянутая ошибка генерируется.


Обходной путь, который я использую в таких ситуациях, следующий:

  • Я использую шаблон со всеми возможными элементами, чтобы Pure не генерировал ошибки
  • Некоторые элементы (например, отображение сообщений об ошибках и т. Д.) Скрыты с помощью классов CSS
  • Я изменяю классы CSS с помощью функций Pure и JavaScript с директивами для скрытия / отображения элементов в зависимости от входных данных.
...