Сначала наличие startWith
на всех этих наблюдаемых означает, что они все испустят в начале ложь. Как будто вы нажали все эти кнопки одновременно.
Я думаю, вы должны попытаться добиться другого поведения. Используя startWith
, вы хотите установить начальное состояние свойства modal
, верно? Поэтому оно должно прийти после слияния этих потоков вместе.
Для переключения значения вам нужны две вещи:
scan
) Это мой подход:
const modal$ = merge(
show$.pipe(mapTo(true)),
hide$.pipe(mapTo(false)),
toggle$.pipe(mapTo(null))
).pipe(
startWith(false),
scan((acc, curr) => {
if (curr === null) {
return !acc;
} else {
return curr;
}
})
);
Показать кнопку всегда выдает true
, кнопка скрытия выдает false
, а кнопка переключения - null
. Я объединяю их вместе, и мы хотим начать с false
. Далее идет scan
, который держит состояние в аккумуляторе.
Когда приходит null
, он возвращает отрицательное состояние. Когда приходит true
или false
, он возвращает его - таким образом он устанавливает новое состояние независимо от предыдущего значения.
Хотя это зависит от того, что Вы делаете, большинство приложений должно смочь просто обновить и затем зафиксировать все, что повреждается. По моему опыту, главное, которое я должен был зафиксировать после обновления,
Изменения в части броского материала с моделями, такими как синтаксис для следующих внешних ключей.
Маленький набор шаблонных изменений, прежде всего автовыходя.
Что-либо, что зависит от определенной структуры внутренностей Django. Это не должно быть проблемой, если Вы не делаете материал как динамичное изменение внутренностей Django для изменения их поведения способом, это необходимо/удобно для проекта.
Подводя итоги, если Вы не делаете много действительно странного и/или сложного материала, простое обновление должно быть относительно безболезненным и только потребовать нескольких изменений.
Обновление. Для меня это было очень просто: изменение __str__()
кому: __unicode__()
, запишите основной admin.py
, и сделанный. Только начните запускать свое приложение на 1,0, протестируйте его, и когда Вы встречаетесь, ошибка используют документацию относительно назад несовместимых изменений, чтобы видеть, как устранить проблему.
Просто обновите свое приложение. Переключатель от 0,96 до 1,0 был огромен, но с точки зрения Назад Несовместимых изменений я сомневаюсь, что Ваше приложение даже имеет 10% из них.
Я был на соединительной линии перед Django 1.0 так я, переход для меня был со временем, но даже затем единственными главными вещами, которые я должен был изменить, были newforms, newforms-администратор, ул. () к unicode () и maxlength к max_length
Большинство других изменений было новыми возможностями, или бэкенд переписывает, или наполните это как кого-то, кто создавал основные веб-сайты, даже не добирался рядом.
Только самые простые сайты легко обновить.
Ожидайте реальную боль, если Ваш сайт, окажется, будет для части мира неASCII (чтение: где угодно за пределами США и Великобритании). Самое болезненное изменение в Django переключалось от строк байтов до объектов unicode внутренне - теперь необходимо найти все места, где Вы используете строки байтов и изменяете это на unicode. Худший случай является шаблонным рендерингом, Вы никогда не будете знать, что забыли заменять одну переменную, пока Вы не получаете UnicodeError.
Другая известная вещь: манипуляторы (oldforms) пошли, и у Вас нет никакого другого пути, чем переписать, все расстается с формами (newforms).
Если бы это - Ваш случай, и Ваш проект больше, чем 2-3 приложения, я довольно отказался бы обновить до действительно необходимый.
Мы обновили в многоступенчатом процессе, и я довольно доволен этим. Рассматриваемым приложением были приблизительно 100 000 LoC и выполнение нескольких функций основного бизнеса с партией взаимодействия через интерфейс к унаследованным системам. Мы работали как этот:
Все это заняло приблизительно 6 месяцев, где мы, где выполнение производства прежней версии переходит на наших серверах при портировании другого ответвления на 1,0. При выполнении так мы также, где, добавляя опции к производственному ответвлению.
Заключительное слияние было намного менее грязным, чем ожидалось и заняло приблизительно неделю для 4 кодеров, объединяющихся, рассматривающих, тестируя и фиксируя. Мы затем развернули, и приблизительно в течение недели был укушен ранее неожиданными ошибками.
В целом, я довольно удовлетворен результатом. У нас есть намного лучшая кодовая база теперь для дальнейшего развития.