Javascript теперь реализует Object.observe и Array.observe, однако я не могу найти способ объединить эти функции.
То, что я пытаюсь сделать, это иметь массив объектов. Когда какое-либо свойство одного из объектов изменяется, я хотел бы получать уведомления.
Object.observe позволяет мне получать уведомления об изменении свойства определенного объекта.
Array.observe позволяет мне получать уведомления, когда происходит изменение уровня массива.
Если я специально не наблюдаю за каждым элементом массива, у меня нет возможности узнать, когда изменяется конкретное свойство элемента.
Например:
var model = [
{
data: 'Buy some Milk',
completed: false
},
{
data: 'Eat some Food',
completed: false
},
{
data: 'Sleep in a Bed',
completed: false
},
{
data: 'Make Love not War',
completed: false
}
];
Array.observe(model, function(changeRecords) {
console.log('Array observe', changeRecords);
});
model[0].data = 'Teach Me to code';
model[1].completed = true;
model.splice(1,1);
model.push({data: "It's a new one!",completed: true});
дает консольный вывод:
Array observe [Object, Object]
0: Object
addedCount: 0
index: 1
object: Array[4]
removed: Array[1]
type: "splice"
__proto__: Object
1: Object
addedCount: 1
index: 3
object: Array[4]
removed: Array[0]
type: "splice"
__proto__: Object
length: 2
__proto__: Array[0]
Эти два уведомления относятся конкретно к:
model.splice(1,1);
а также
model.push({data: "It's a new one!",completed: true});
но полностью игнорирую
model[0].data = 'Teach Me to code';
а также
model[1].completed = true;
Есть ли способ наблюдать за каждым изменением, будь то изменение уровня массива или уровня объекта?
Я знаю, что есть библиотеки, которые могут сделать это для меня, однако я хотел бы понять, как реализовать это непосредственно в моем собственном коде.
РЕДАКТИРОВАТЬ: ОК, похоже, я не упустил ни одной магической функциональности, и единственный верный вариант - наблюдать за отдельными элементами массива.
Итак, чтобы расширить исходный вопрос, каков наиболее эффективный метод адаптации массивов для обработки наблюдений за элементами?