Я использую Ractive для отображения списка сообщений, например:
<ul class="collapsible">
{{#each messages}}
<li>
<div class="collapsible-header" on-click="readNotification">{{#if read}}<span>{{title}}</span>{{else}}<strong>{{title}}</strong>{{/if}}</div>
<div class="collapsible-body">
<p>{{body}}</p>
</div>
</li>
{{/each}}
</ul>
Нет проблем, но когда элемент списка щелкнут, он должен открыться, и я поставлю сообщение как прочитанное. Это запускает Ractive для повторного рендеринга этого узла, предотвращая его открытие.
Как с этим лучше всего справиться?
EDIT: Данные в ractive обновляются этим обратным вызовом, который прослушивает событие child_changed из Firebase. Затем я устанавливаю обновленный объект в его положение индекса в ractive объекте. ractive, вероятно, видит в этом новый объект, а не обновленный?
this.firebase.child(collectionKey).on('child_changed', function(snapshot) {
var collectionKey = snapshot.ref().parent().key();
var obj = snapshot.val();
var key = snapshot.key();
var index = app.ractive.get(collectionKey).map(function(item) {
return item._firebaseKey;
}).indexOf(key);
app.ractive.set(collectionKey+'.'+index, obj);
});