rv-each - предотвратить удаление при изменении данных
Как я могу изменить привязку rv-reach так, чтобы новые и измененные элементы массива добавлялись в dom, а удаленные элементы массива не удалялись из dom?
новый элемент массива> добавить элемент в dom
измененный элемент массива> изменить элемент в домене
удаленный элемент массива> ничего не делать
1 ответ
Вы просто должны держать его в массиве, чтобы не удалять его из DOM.
На самом деле вы хотите добиться так называемого "мягкого удаления", для этого вам нужно добавить свойство: removed
к элементу, который по умолчанию установлен на 0
затем, основываясь на этом значении, вы можете либо скрыть элемент, присвоить ему красный цвет и т. д., пока он все еще будет отображаться в домене.
Вот как я могу это сделать, чтобы дать вам пример того, как это будет работать:
var App = {} // this wraps everything up.
App.items = [] // collection of items
// example item model
App.item = new function(data){
var _self;
this.data = data || {};
this.defaults = {
removed:0
}
// set default values where needed if not set
for (x in this.defaults) {
if(!this.data.hasOwnProperty(x)){
this.data[x] = this.defaults[x];
}
}
this.remove = function(){
_self.data.removed = 1;
// ajax request to set current item to removed...
// but dont remove it from the array so it stays in the dom
}
_self = this;
}
rivets.bind($('#app'),{app:App});
тогда, если вы хотите добавить элементы:
items.push(new item({name:'my newest item'}); // new item gets added to the dom
если вы хотите удалить элементы, например:
в конце концов добавьте несколько классов, когда элемент будет удален:
rv-class-danger="item.data.removed | eq 1"
// добавляет класс опасности
<div id="app">
<div rv-each-item="app.items" rv-class-danger="item.data.removed | eq 1">
{{ item.data.name }}
<!-- when the button is clicked, this will trigger the remove function on the item it belongs to. -->
<button rv-on-click="item.remove">remove</button>
</div>
</div>
Таким образом, всякий раз, когда вы изменяете какие-либо данные, он также будет изменяться в DOM, когда вы удаляете элемент, он просто устанавливает свойство удаленного элемента в 1
так что вы можете держать его в этом доме. И когда вы добавляете элемент, вам просто нужно вставить его в массив, и он будет добавлен в DOM.