Comments 12
Всё уже украдено написано до нас: github.com/ifandelse/Knockout.js-External-Template-Engine
+1
Видел, не понравилось.
Это вариант с observable полем template — биндинг происходит дважды: сначала на заглушку вроде «loading...», а когда уж придет ответ с сервера, на настоящий шаблон. Заглушка мигает на полсекунды, лишний шаблон и не очень красиво. Зато из коробки работают foreach, with, if биндинги.
Это вариант с observable полем template — биндинг происходит дважды: сначала на заглушку вроде «loading...», а когда уж придет ответ с сервера, на настоящий шаблон. Заглушка мигает на полсекунды, лишний шаблон и не очень красиво. Зато из коробки работают foreach, with, if биндинги.
0
Видел, не понравилось.
А мне очень даже )
Это вариант с observable полем template
Склонна полагать, что здесь вы имеете в виду свойство биндинга
name
.Коли так, то observабельное имя шаблона это круто, потому что во view-модели можно просто взять и поменять имя шаблона, получив обновление UI безвозмездно, то есть даром.
биндинг происходит дважды
Биндинг дважды происходить не может, а вот обратный вызов
afterRender
таки да.Опять же, я считаю это преимуществом, нежели недостатком, потому что
1) можно вставить свою заглушку
2) мигание дефолтной заглушки устраняется одним-единственным CSS-правилом для селектора
.infuser-loading
.0
Склонна полагать, что здесь вы имеете в виду свойство биндинга name
Нет, не имею.
Открываем либу. В 16-й строчке:
self.template = ko.observable(/*всякоетам*/)
Его я и имею ввиду. Ниже в 57-ой строчке:
self.template(tmpl);
Отсюда и второй проход applyBindingsToNodeDescendants, и соответственно afterRender колбек. Это я считаю лишним поведением.
А мне очень даже )
На вкус и цвет фломастеры разные.
0
На всякий случай напомню что писать setTimeout(«somecode in brackets») — моветон, так как по сути это eval.
0
и? может надо думать, а не тупо следовать рекомендациям? В данном случае ничего страшного не случится и не может случиться, а запись короче. Разве что какой-то нуб увидит это и станет везде его так использовать.
Впрочем автор недалеко ушел- там setTimeout вообще не нужен.
И нужно добавить init и вернуть из него
Т.е. не один корневой элемент, то биндинги применятся только к первому.
Короче — надо читать статью из первого комментария.
Впрочем автор недалеко ушел- там setTimeout вообще не нужен.
И нужно добавить init и вернуть из него
{ controlsDescendantBindings: true }
. Кроме того, если в шаблоне будет: <div> ... </div>
<div> ... </div>
Т.е. не один корневой элемент, то биндинги применятся только к первому.
Короче — надо читать статью из первого комментария.
0
Я же просил вчитаться :-).
each
не нужен — есть встроенная функция для этой задачи....
$(result).appendTo(element);
ko.applyBindingsToDescendants(bindingContext, element);
...
0
Sign up to leave a comment.
Асинхронные шаблоны в Knockout.JS