Подтвердить что ты не робот

Что такое MVVM, и следует ли использовать его?

Я смотрел шаблон MVVM, особенно нокауты, и в основном это просто заставляет меня съеживаться. Я не буду долго говорить о преимуществах сохранения структуры, презентации и отображения отдельно, я просто спрошу (как пример): Какая разница между

<button data-bind="click: someJavaScriptFunction">Something</button>

и

<button onclick="someJavaScriptFunction();">Something</button>

и нужно ли нам вводить так много контроля поведения в разметку? Как чистый и минималистичный, как это, кажется, идет вразрез с каждым принципом веб-программирования, о котором я когда-либо слышал.

Неужели я ошибаюсь?

4b9b3361

Ответ 1

Вот более прямой ответ на ваш вопрос.

Во втором примере вы ссылаетесь на функцию, которая должна находиться в глобальной области видимости (т.е. свойство объекта window).

В первом примере вы ссылаетесь на свойство текущей модели представления.

Да, это тонкое различие, но это важно. Если вы используете атрибуты on-event, вы можете ссылаться только на вещи, которые существуют в глобальной области. Это означает, что вы должны поместить все, что хотите получить в глобальном масштабе, что приводит к очень грязному коду.

Если вы используете декларативные привязки, то точное значение привязок вместо этого зависит от контекста.

Это помогает думать о разметке HTML как нечто более совпадающее. То, что вы действительно смотрите, - это структурированный доступ к модели представления. Подумайте о with и forEach как вложенные контексты и другие привязки в качестве их атрибутов. Взаимосвязь между декларативными привязками и базовым HTML внезапно кажется более похожей на работу с XSLT.

Два примера очень похожи. Но лежащие в основе концепции значительно отличаются друг от друга, и поэтому привязка данных к таким мощным атрибутам и к событиям настолько неприятна.

Признаки атрибутов on-event не одобряются не только тем, что они смешивают логику со структурой. Это то, что они - слабая попытка закрепить произвольный код JavaScript на HTML-элементах, которые препятствуют правильной инкапсуляции логики приложения. Атрибуты on-event - это "крючки" низкого уровня, привязки расширяют поведение элементов.

Все, что было сказано, вероятно, могут сделать те же самые ужасные вещи, которые люди сделали с атрибутами on-event, используя декларативные привязки. Разница в том, что еще вы можете с ними сделать. Вы не должны всегда судить о технологиях, как их можно злоупотреблять - мы все взрослые здесь.

Ответ 2

Используется только одна часть MVVM - в частности, представление - в примере кода, приведенном выше. Причина использования Knockout (или любой другой библиотеки MVVM) заключается в том, чтобы упростить привязку ваших представлений к модели - модели просмотра - таким образом, вы можете прекратить писать много кода шаблона только для возврата значений из вашего представления.

Я вижу много воровского кода javascript/jquery, где люди идут и используют что-то вроде этого:

var ex = {
   some1: $('#textbox1').val(),
   some2: $('#textbox2').val()
};

Проблема заключается в том, что она буквально замусорена во всем веб-приложении, и ее очень утомительно поддерживать. Я знаю с помощью Knockout, всякий раз, когда мой просмотр обновляется, моя модель просмотра также будет обновлена.

Это не нужно для каждого приложения, и вы не должны использовать его только потому, что он "крут" для использования. Очевидно, что для этого нужно быть причиной, мой пример выше - одна из причин, и я уверен, что их больше.