является ли RactiveJS 0.5 обратно совместимым?

#ractivejs

#ractivejs

Вопрос:

Я спрашиваю об этом, потому что после обновления версии edge до 0.5.3 у моего приложения возникли проблемы с наблюдателями. Это означает, что у меня есть очередь, я прослушиваю ее изменения в current атрибуте (отлично работает на 0.4.x (выпущен 29 июня), не могу вспомнить точную версию сборки, но это дата), и теперь, после удаления элемента из очереди, он говорит 'current' attribute of undefined . Поскольку он пытается проверить другой элемент в очереди, который не существует.. Я постараюсь сделать ssce завтра и обновить это.

Комментарии:

1. Мы пытались сохранить как можно более обратную совместимость, но было внесено много изменений — подробности см. в Списке изменений . Похоже, что причиной этого может быть один конкретный элемент — ранее обратные вызовы наблюдателя выполнялись внутри блока try-catch, но это затрудняло отладку проблем, так что это больше не так. Поскольку эти обратные вызовы выполняются немедленно, если вы попытаетесь получить доступ, foo.current прежде foo чем появится значение, вы увидите ошибку, которой раньше у вас не было.

2. В основном моя вина: P Было трудно отлаживать эти вещи, когда Ractive проглатывал ошибки. И сложно сообщать в библиотеки регистрации ошибок. Вот в чем проблема: github.com/ractivejs/ractive/issues/873

Ответ №1:

Критические изменения в 0.5.0 перечислены здесь, на github

Одним из них было то, что Ractive больше не игнорирует ошибки в наблюдателях или при вычислении выражений. Более чем вероятно, что это в инициализации observer, где это не имеет значения для вашего варианта использования, но теперь вызывает проблему. Что-то вроде:

 ractive.observe('foo', function(newValue, oldValue, keypath){
    if(oldValue.current) {

    }
})
  

Комментарии:

1. if (e amp;amp; e.current) {...} вместо того, чтобы if (e.current) { ... } решить мою проблему после прочтения вопроса github относительно комментария Джозефа об ошибках проглатывания Ractive, поскольку он проглатывал мои, e которые иногда могли быть неопределенными.