Глядя на эту иллюстрацию для MVVM ( источник ):
Вы можете видеть, что есть отдельные модели данных и бизнес-логики. Однако, используя BLoC , на самом деле нет такого различия. Классы, которые обрабатывают бизнес-логику, также обрабатывают данные, что также может применяться к MVVM .
Чтобы быть справедливым, на самом деле нет большой разницы. ключевая часть , которую нужно убрать, одинакова для обоих: Изоляция бизнес-логики от пользовательского интерфейса. Следовательно, реализация любого из двух будет выглядеть очень похоже, то есть с использованием Stream
и StreamBuilder
.
Кроме того, существуют пакеты, облегчающие работу с Stream
, например, rxdart
, это то, что команда Flutter использует, насколько мне известно.
Для Firefox ссылки кажутся «специальными». Единственный способ получить эту работу - использовать описанный здесь метод createEvent для MDN и вызвать функцию initMouseEvent. Даже если это не сработало полностью, мне пришлось вручную указать браузеру открыть ссылку ...
var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.getElementById('link');
element.dispatchEvent(theEvent);
while (element)
{
if (element.tagName == "A" && element.href != "")
{
if (element.target == "_blank") { window.open(element.href, element.target); }
else { document.location = element.href; }
element = null;
}
else
{
element = element.parentElement;
}
}
Используя jQuery , вы можете сделать то же самое, например:
$("a").click();
, который «щелкнет» по всем якорям на странице.
element.click () - это стандартный метод, описанный в спецификации W3C DOM . Gecko / Firefox Mozilla следует стандарту и позволяет вызывать этот метод только для элементов INPUT.
Вы пытаетесь фактически перейти по ссылке или вызвать нажатие кнопки мыши? Вы можете вызвать щелчок мышью примерно так:
var link = document.getElementById(linkId);
link.onclick.call(link);
Вот кросс-браузерная рабочая функция (может использоваться также и для других обработчиков кликов):
function eventFire(el, etype){
if (el.fireEvent) {
el.fireEvent('on' + etype);
} else {
var evObj = document.createEvent('Events');
evObj.initEvent(etype, true, false);
el.dispatchEvent(evObj);
}
}