Шаблоны пользовательского интерфейса в JavaScript - PullRequest
11 голосов
/ 31 августа 2009

Какие шаблоны пользовательского интерфейса вы обычно используете в JavaScript?

Под шаблонами пользовательского интерфейса я имею в виду лучшие практики, которые будут использоваться для создания и организации пользовательского интерфейса, сгенерированного / управляемого из JavaScript (кроме библиотек, таких как jQuery или YUI).

Например, если вы пришли из мира .NET, вы знакомы с семейством шаблонов MVC (Model-View-Controller). В мире WinForms и ASP.NET вы встретите Model-View-Presenter. В WPF, скорее всего, вы найдете подход MVVM (Model-View-ViewModel).

А как насчет JavaScript?

Ответы [ 6 ]

8 голосов
/ 31 августа 2009

Шаблоны обычно не зависят от языка. Если шаблон имеет значение, за исключением определенных крайних случаев он будет иметь значение независимо от того, какой язык или технологию вы используете. Возьми MVC. Концепция отделения модели от представления от контроллера имеет значение независимо от того, реализована ли модель с помощью СУБД или какой-либо другой технологии, независимо от того, является ли представление HTML, Swing или X.

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

Сам JavaScript не навязывает вам какой-либо конкретный шаблон. Некоторые JavaScript-фреймворки, такие как YUI, Dojo или Glow, склонны вести вас в одном направлении больше, чем в другом.

В конце дня посмотрите на проблему, которую вы решаете, ресурсы и опыт, которые у вас есть, и следуйте шаблонам, которые имеют смысл.

4 голосов
/ 31 августа 2009

Я бы хотел порекомендовать книгу Росса Хармса и Дастина Диаса, Шаблоны проектирования Pro JavaScript , безусловно, лучший ресурс по этой теме, и его обязательно стоит прочитать.

Существует также очень интересная статья о JavaScript MVC в последнем выпуске A List Apart .

1 голос
/ 31 августа 2009

Хороший подход к созданию приложения с графическим интерфейсом - это браузер:

  1. с использованием разметки для макета пользовательского интерфейса
  2. с использованием логики пользовательского интерфейса JavaScript
  3. с использованием CSS для оформления пользовательского интерфейса

Большинство современных GUI-сред (ExtJS, Dojo и т. Д.) Предлагают API, которые в значительной степени помогают создавать GUI только на JavaScript. Но есть еще одна инфраструктура графического интерфейса Ample SDK , которая приносит ранее упомянутое разделение проблем. Он позволяет использовать языки на основе XML (XHTML, XUL, SVG) для макета, CSS для стиля и DOM API для логики пользовательского интерфейса.

Для организации клиентского GUI-приложения вы можете использовать либо MVC, либо немного более продвинутый шаблон PAC, как и в первом случае - доступна реализация PureMVC

Взгляните на следующий фрагмент (относится только к логике пользовательского интерфейса, а не к логике приложения, создаваемой с помощью MVC / PAC):

index.html

<script type="application/ample+xml">
    <xul:tabbox onselect="fOnSelect(event)"
     xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
        <xul:tabs>
            <xul:tab label="checkbox" />
            <xul:tab label="textbox" />
            <xul:tab label="datepicker" />
        </xul:tabs>
        <xul:tabpanels>
            <xul:tabpanel>
                <xul:checkbox />
            </xul:tabpanel>
            <xul:tabpanel>
                <xul:textbox />
            </xul:tabpanel>
            <xul:tabpanel>
                <xul:datepicker />
            </xul:tabpanel>
        </xul:tabpanels>
    </xul:tabbox>
</script>

index.css

@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
xul|tab:focus {
    color: red;
}

index.js

function fOnSelect(oEvent) {
    alert(oEvent.currentTarget.selectedItems.length)
}
1 голос
/ 31 августа 2009

Как я знаю, для Javascript пока нет конкретных шаблонов. Но я думаю, что есть потенциал для чего-то вроде подхода виджетов (компонентов). Поскольку в основном мы используем JavaScript для расширения возможностей нашего HTML-кода. Логично, что мы должны подключить каждый объект javascript к тегу html. Так что здесь у нас есть что-то вроде Model (jsObject) + View (HTMLrepresentation). Чтобы получить MVC, нам нужны контроллеры, и для этого у нас есть События. В этом случае у нас будет легко инкапсулированный компонент.

например:

// this is a part of some FormValid.js
<script>
function FormValid(){

}

FormValid.prototype.validate=function(){...}
</script>

//this is our HTML
<form id="form1"...onsubmit="this.jsObject.validate();">
</form>

<script>
//all the following stuff could be solved in one line, but you need to create some helper. Like Components.Attach("FormValid").to("form1");
var newObj=new FormValid()
var form=document.getElementById("form1");
from.jsObject=newObj;
newObj.htmlObj=form;
</script>

Также у меня есть идея использовать шаблонизаторы вроде Zparser для разделения вида и модели. Я занимаюсь разработкой библиотеки js для этого, поэтому я сейчас нахожусь в этом вопросе.

У нас есть основной объект с методом view . Все наши классы имеют его как прототип в конце. Этот метод получает свойство templates класса, а с помощью парсера некоторых шаблонов генерирует HTML на основе нашей модели. Этот HTML-код вставляется в узел htmlObj, поэтому вид нашего объекта обновляется. Это в основном идея, и наш код становится:

// this is a part of some FormValid.js
<script>
function FormValid(){

}
Components.extendCore(FormValid);

FormValid.prototype.validate=function(){...}
</script>

FormValid.prototype.templates={
   main:'<form class="form1"...onsubmit="this.jsObject.validate();">...</form>'
}

//this is our HTML
<div id="form1"></div>
<script>
Components.Attach("FormValid").to("form1");
</script>

Я все еще думаю, что должен присутствовать последний встроенный <script>, и он не смешивает логику с представлением, потому что это компонент - сплошная часть. Это не имеет значения одно без другого. На самом деле это должно быть частью приложения. Что-то вроде html компонента (в одном примере это div) должно быть определено и обернуто компонентом, который автоматически добавит скрипт и идентификаторы.

Теперь. Я показал вам 2 примера, и я объясню, почему второй является слишком конкретным.
Все дело в доступности и производительности (и утечках памяти). Если вы будете часто обновлять все html-компоненты - он будет мигать, также вам нужно будет настроить все динамические события обратно и проверить все на утечки памяти. Но главная проблема, если JS выйдет из строя - ваше приложение ничего не покажет.

Поэтому я предпочитаю выбирать между этими двумя :) и использовать все на своих местах.

0 голосов
/ 24 февраля 2013

Шаблоны не всегда независимы от языка. Многие классические шаблоны проектирования бессмысленны в JavaScript, потому что нам не нужно много обходных путей, которые они решают в более строгих парадигмах языка.

Причина, по которой MVC не очень подходит для веб-разработки на стороне клиента, однако более ситуативна.

Прежде всего, я думаю, что время и боль доказали, что типичные веб-приложения лучше всего рассматривать как два отдельных приложения. Тот, который происходит в браузере, и тот, который происходит на сервере. Чем меньше зависимостей вы устанавливаете между ними, тем более гибкие, удобные в обслуживании и более легкие веб-приложения должны быть изменены в моем опыте. М - это бизнес-логика (которую люди обычно неверно связывают с ИМО «уровня базы данных»).

Проблема с MVC в этом сценарии заключается в том, что мы не хотим раскрывать бизнес-логику на стороне клиента, и попытка объединить все приложение в одну отвратительную конструкцию, скрывающую разделение http, оказалась болезненной, как я уже говорил. 1007 *

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

0 голосов
/ 31 августа 2009

Посетите сайт под названием айва . Я не уверен, сколько шаблонов здесь шаблонов пользовательского интерфейса javascript. Но это довольно хороший ресурс для шаблонов пользовательского интерфейса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...