Наблюдатель не обнаруживает нажатие массива

по мере того, как я открывал для себя эту библиотеку все больше и больше, я застрял на этой единственной вещи.

У меня есть этот массив 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, как и тот, который я использовал, но этот был выпущен два дня назад. Спасибо, Рич и Марти, что бы вы ни делали в этих коммитах.


person Eduard    schedule 20.05.2014    source источник
comment
jsfiddle.net/Dz4RZ, кажется, работает (пограничная версия). Давайте разберемся, чем отличается от вашего использования. Кроме того, какую версию вы используете?   -  person martypdx    schedule 20.05.2014
comment
@martypdx jsfiddle.net/Dz4RZ/1, я использую 0.4.0, похоже, что использую подмассив не работает. Или я что-то там не так делаю.   -  person Eduard    schedule 20.05.2014
comment
Вы использовали неправильную переменную, должно быть staticData.log. jsfiddle.net/Dz4RZ/3 . Может быть, дело в том, что observe проглатывает ошибки? Попробуйте добавить console.log, чтобы увидеть, срабатывает ли он.   -  person martypdx    schedule 21.05.2014
comment
Ах, подождите, в 4.0 массивы наблюдения работали немного по-другому, только с ключевым путем length при добавлении. См. jsfiddle.net/Dz4RZ/4. Он все еще срабатывает, но только для изменения длины, а не для самих элементов (что, если я правильно помню, возможно, было ошибкой). Мы убрали длину как совпадающую с queue.* для 4.1, но все еще явно наблюдаемую через queue.length.   -  person martypdx    schedule 21.05.2014
comment
Обновил крайнюю версию, видимо моя версия вышла неделю назад или что-то в этом роде а эта версия 4.0 вышла 2 дня назад. Я ничего не менял в своем коде, но работает с пограничной версией. Спасибо.   -  person Eduard    schedule 21.05.2014


Ответы (1)


Исправлено обновлением до версии Edge.

person Eduard    schedule 20.05.2014