реф: http://jsfiddle.net/ffmqd0zz/Ractivejs декоратор непоследовательно инициализируется
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 не инициализируются.
Кажется, что это оптимизация производительности, просто инициализируя декоратор на третьем добавленном элементе, пропуская первые два, даже если они были заменены.
Я делаю это неправильно или это ошибка? И может кто-нибудь предложить обходной путь, пожалуйста.
заранее спасибо
Спасибо, Марти. Ни один из ваших примеров не работал так, как я ожидал.Но они дали мне новое новое представление, из которого я смог добраться туда, где мне нужно. –