Derby.js - добавление / удаление уникальных элементов списка
Это мои загрузочные данные, которые я отправляю в модель, когда из БД ничего не получается:
var liveaudience = {
triggers : [
{
'trigger_id': 'vocal_stomp',
'duration': 1000,
'color': '#F23000',
'sound': 'A#'
},
{
'trigger_id': 'guitar_stomp',
'duration': 600,
'color': '#CC0234',
'sound': 'Cmaj'
},
{
'trigger_id': 'drum_pad',
'duration': 1200,
'color': '#CF2451',
'sound': 'Emin'
}
]
};
У меня есть один маршрут, который делает это, а затем визуализирует эти три загруженных элемента в шаблоне:
get('/:triggerId?', function(page, model, params){
var triggers = model.get('liveaudience.triggers');
if(typeof triggers === 'undefined'){
// bootstrap triggers
model.push('liveaudience.triggers', liveaudience.triggers);
}
model.subscribe("liveaudience.triggers", function(err, scopedModels){
page.render({'triggers': scopedModels.get()[0]});
});
});
а затем вот шаблон:
<ul id="triggers">
{{#each triggers}}
<li data-id="{{id}}" class="trigger" style="background-color:{{color}};">
<span class="trigger-label">{{trigger_id}}</span>
<a x-bind="click:removeTrigger" class="remove-trigger">x</a>
</li>
{{/}}
</ul>
Все отображается, но {{id}} возвращает функцию, и я бы хотел, чтобы это был уникальный идентификатор GUID. Основная проблема заключается в том, что я не знаю, как получить и удалить этот элемент из DOM при нажатии и запуске removeTrigger
обработчик. Глядя на примеры, я видел это в обработчике:
model.at(e.target).remove();
но это не работает
Есть идеи?!
1 ответ
Вместо того, чтобы передавать триггеры в page.render, попробуйте использовать model.ref следующим образом
Для дерби 0,5
var triggers = model.at('liveaudience.triggers');
model.subscribe(triggers, function(err){
model.ref('_page.triggers', triggers);
page.render();
});
Для дерби 0,3
model.subscribe('liveaudience.triggers', function(err,scopedModels){
model.ref('_page.triggers', scopedModels);
page.render();
});
Затем доступ к триггерам в цикле так
{{#each _page.triggers}}
Это должно правильно настроить привязки.
А потом удалить (для Дерби 0,5, не совсем уверен, для 0,3)
e.at().remove();