по мере того, как я открывал для себя эту библиотеку все больше и больше, я застрял на этой единственной вещи.
У меня есть этот массив staticData:
staticData = {
buildingsQueue : [
{ current: false, building : 14, queueID : 1, elapsed : 27, finish : 46 },
{ current: false, building : 4, queueID : 2, elapsed : 0, finish : 25 }
]
}
И этот экземпляр Ractive:
var townController = {
init : function () {
townTPL = new Ractive({
el : 'pageContainer',
append : true,
template : templates.town,
data : {
staticUrl : staticData.url,
queue : staticData.village.buildingsQueue
}
});
townTPL.observe('queue.*',function(newValue,oldValue,keypath){
console.log('changed::'+keypath);
});
}
Мои BuildingQueue будут обрабатываться по одному, и TownController установит для ключа current значение true, поэтому я решил создать наблюдателя для queue.* после пример Рича
var ractive = new Ractive({
el: myContainer,
template: myTemplate,
data: {
people: [
{name: 'Rich Harris'},
{name: 'Marty Nelson'}
]
}
});
ractive.observe('people.*', function(newValue, oldValue, keypath) {
});
var people = ractive.get('people');
people.push({name: 'Jason Brown'});
//newValue will equal 3, and the keypath will be people.length
Проблема в том, что buildingQueue со временем меняется, и отправка данных, как показано ниже, не запускает обратный вызов наблюдателя:
var list = TownTPL.get('queue');
list.push({ current: true, building : 1, queueID : 4, elapsed : 0, finish : 36 })
// OR
staticData.buildingsQueue.push({ current: true, building : 1, queueID : 4, elapsed : 0, finish : 36 });
Наблюдатель не срабатывает, как говорит документация Рича в своем примере. Моя логика заключается в том, что наблюдатели работают только с элементами массива, которые находятся в массиве при инициации, но я почти уверен, что это не так, и он должен работать с динамическими массивами, поэтому, пожалуйста, просветите меня по этому поводу.
ВНИМАНИЕ Я запускаю push-события из-за пределов функции init , например, консоли Javascript или другого объекта javascript.
ИСПРАВЛЕНА ПРОЛЕМА. Я обновил плагин до версии Edge, все еще 0.4.0, как и тот, который я использовал, но этот был выпущен два дня назад. Спасибо, Рич и Марти, что бы вы ни делали в этих коммитах.
staticData.log
. jsfiddle.net/Dz4RZ/3 . Может быть, дело в том, чтоobserve
проглатывает ошибки? Попробуйте добавитьconsole.log
, чтобы увидеть, срабатывает ли он. - person martypdx   schedule 21.05.20144.0
массивы наблюдения работали немного по-другому, только с ключевым путемlength
при добавлении. См. jsfiddle.net/Dz4RZ/4. Он все еще срабатывает, но только для изменения длины, а не для самих элементов (что, если я правильно помню, возможно, было ошибкой). Мы убрали длину как совпадающую сqueue.*
для 4.1, но все еще явно наблюдаемую черезqueue.length
. - person martypdx   schedule 21.05.2014