Как вы обрабатываете сложные объекты JavaScript на клиенте? - PullRequest
3 голосов
/ 30 ноября 2010

РЕДАКТИРОВАТЬ: Я собираюсь разбить это на два более конкретных вопроса.

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

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

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

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

Спасибо.

Ответы [ 4 ]

1 голос
/ 30 ноября 2010

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

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

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

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

0 голосов
/ 08 декабря 2010

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

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

0 голосов
/ 07 декабря 2010

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

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

<%= @object.attribute %>

0 голосов
/ 01 декабря 2010

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

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

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

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