ссылка: http://jsfiddle.net/ffmqd0zz/
HTML:
<div id='books_container'/>
<script type='ractive/template' id="books">
{{#books}}
<div decorator='decoration' id="{{id}}">
<span> title: {{ title }}</span>
<span> id: {{ id }}</span>
</div>
{{/books}}
</script>
JavaScript:
var MyDecorator = function(node) {
console.log("init MyDecorator for id: " + $(node).attr('id'));
return { teardown: function() {}};
};
var books = new Ractive({
el: '#books_container',
template: '#books',
data: {books: [{"id": 1174,"title": "franny and zoey"},
{"id": 1175,"title": "moby duck"}]},
decorators: { decoration: MyDecorator }
});
console.log("init complete")
books.set('books', [{"id": 1176,"title": "life, the universe and stuff"},
{"id": 1177,"title": "yellowbrick road"},
{"id": 1178,"title": "grapes of wrath"} ]);
обратите внимание, что инициализация декоратора регистрируется в консоли.
Когда Ractive инициализируется, два начальных элемента в списке «книги» оформлены правильно, как указано в сообщениях console.log. Однако, когда список изменяется с помощью «books.set()», Ractive украшает только третий элемент в списке, а декораторы для книг с идентификаторами 1176 и 1177 не инициализируются.
Кажется, это оптимизирует производительность, просто инициализируя декоратор на третьем добавленном элементе, пропуская первые два, даже если они были заменены.
Я делаю это неправильно, или это ошибка? И может кто-нибудь предложить обходной путь, пожалуйста.
заранее спасибо