2010-11-30 3 views
3

EDIT: Я собираюсь разбить это на два более конкретных вопроса.Как вы обрабатываете сложные объекты JavaScript на клиенте?

Я пытаюсь понять лучшие практики и шаблоны для разработки JavaScript на стороне клиента. В частности, что вы делаете для управления более сложными моделями данных на клиенте?

В качестве примера скажите, где вы управляете каким-то магазином в Интернете и имеете Продукт, с его довольно типичными свойствами: {id, description, price и т. Д.}. Но у продукта также есть набор категорий, с которыми он мог бы быть связан, и, следовательно, необходимо было выбрать еще два списка: AvailableCategories и AssociatedCategories. Конечно, чтобы сделать вещи более сложными, ваша ассоциация категорий с таблицами не является простым соединением, но имеет метаданные, такие как скалярное число от 1 до 10, которое описывает, насколько сильно связанный продукт с категорией. А затем скажем, что есть четыре или пять других ассоциаций, из которых одна имеет таблицу «Доступные», которая может потребовать подкачки (например, возможно, вы связываете продукт с чем-то, у которого есть миллион элементов в таблице, и вы хотите свернуть только 100 из них за один раз, с возможностью поиска и сортировки, конечно).

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

Я думаю о переходе на платформу MVC на стороне клиента, например SproutCore, но хотелось бы увидеть некоторые более легкие варианты веса и шаблоны. Я был бы признателен за то, что вы используете, почему вы его используете, и любые другие мысли по этому проблемному пространству.

Спасибо.

+1

Непонятный вопрос. Сложные модели сложны. SproutCore, еще одна инфраструктура пользовательского интерфейса, не делает сложные модели более простыми. – jfar 2010-11-30 16:40:03

ответ

1

Когда я создаю javascript-приложения, я не начинаю с рассмотрения модели данных, а скорее взаимодействия пользователя, которое приложение будет поддерживать. Затем я разрабатываю эти взаимодействия, создавая очень специфические вызовы RPC ajax, которые заполняют именно ту точку зрения, на которую я смотрю. То же самое с операциями в этом представлении, у меня есть очень специфические вызовы RPC ajax, которые делают именно то, что требуется для этого представления.

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

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

В этом я нашел шаблон MVP намного лучшим выбором, чем MVC - управляя всем кодом приложения с событиями.

0

Не уверен, что я понимаю ваш вопрос, но я думаю, что я нахожусь в подобном случае:

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

Я не использую никаких фреймворков для реализации моделей данных. (Но я использую YUI для ajax-коммуникаций и пользовательских виджетах)

0

Я не уверен, что понимаю. Вам сложно работать с объектами JSON из-за сложности их соответствующих объектов на стороне сервера?

Ruby on Rails предлагает лучшее из обоих миров: шаблон js.erb. Попросите ваш запрос AJAX принять js и создать шаблон js.erb, который может ссылаться на ваш объект Rails напрямую, включая все ассоциации и т. Д. Этот шаблон будет использовать код javascript, который может получить доступ к значениям из вашего объекта Rails, используя обозначение erb:

<%= @object.attribute %>

0

Я имею в виду перемещение к каркасу стороне клиента MVC, как SproutCore, но хотел бы видеть некоторые легкие варианты веса и узоры.

Sammy.js является фантастическим, если вы хотите что-то легкое. Я нахожусь в середине написания одностраничного веб-приложения (выполнено 80%). Он получает/устанавливает все свои данные из веб-службы RESTful на основе ~ 30 таблиц и кучи «просмотров». Я ошеломлен тем, насколько легко это было до сих пор, и Сэмми, безусловно, очень помогает.

Смежные вопросы