Pull to refresh

Comments 33

Только что прочитал доки на их сайте, захожу на хабр, а тут эта статья, отлично :)
Специалисты, поясните пожалуйста — в чём преимущества/недостатки Ember.js перед Backbone.js. Спасибо.
Судя по статье, в Ember нет бОльшей части функционала Backbone. В Backbone хорошо реализованы модели, наследование, коллекции. Есть синхронизация модели с сервером из коробки. При этом они никак не завязаны на отображение. Это именно средства для описания предметной области — модели данных. С другой стороны отображения (Views) в Backbone многим кажутся громоздкими. Я думаю им стоило бы изобразительную часть сделать опциональной.

Я использую сейчас связку: Backbone + Knockout через надстройку Knockback. При этом есть еще одна надстройка над Backbone — Backbone-Relational. Более того серверная часть на NodeJS, так что модель данных для сервера и клиента у меня описывают одни и тот же файлы. Для сервера модели дополнительно расширяются. A Backbone-Relational в автомате помогает поддерживать связи между моделями. Пока что все красиво, но и не без особенностей. Knockback используется на клиенте — он просто позволяет облегчить конвертирование моделей Backbone в ViewModels Knockouta.
Как заявляют разработчки, ember стремится уменьшить кол-во «шаблонного кода», т.е. в нем сразу выбраны решения для типичных задач.
Основное преимущество и видимо одновременно и недостаток — это байндинги данных к Handlebars шаблонам. Что позволяет очень удобно автоматически обновлять страницу при изменениях. А с другой стороны это же накладывает некоторые ограничения на генерируемый по умолчанию html и он немного «замусоревается» служебными тегами, которые нужны ember для поддержки этой автоматики.
Ну и есть вопрос насколько гибко и быстро это будет работать в случае большого и/или сложного приложения. Хотя разработчики, вроде бы, обещают, что с этим все хорошо.

Также хорошо выглядит возможнось создавать вложенные view (пример из документации):
App.UserView = Ember.View.extend({
	templateName: 'user',
	// ...

	infoView: Ember.View.extend({
		templateName: 'info'
		// ...
	})
});

Это позволяет управлять довольно маленькими блоками страницы и повторно их использовать в других view.

Не могу сказать, что у меня сильно большой опыт работы с backbone и ember, но поигравшись с ними в небольших проектах, мне ember кажется удобнее и производит хорошее впечатление.
Ember = Sproutcore -> у Sproutcore есть dataStore и это круто
Если вторая статья ваша, то было бы хорошо, либо более полную на Русском, либо перевод той статьи, для того чтобы было все в одном месте.
Очень любопытны биндинги, которые есть в Ember.js. Это точно MVC фреймворк?

И да KnockoutJS это чистой воды MVVM, а не MVC.
Все эти JS Frameworks черезчур запутанные и каждый пытается навязать свою идеологию.
Стоит ли все так усложнять на стороне клиента?
Не проще ли писать на JQuery более очевидные конструкции?
А то получается и на стороне сервера у нас MVC и на клиенте MVC. Количество кода вырастает в разы!
Где преимущество? В чем фишка? Я так и не увидел.
Ты и тут можешь использовать жиквери.
Если пишешь приложение, в котором есть крудо-подобные операции (а они почти всегда есть), то очень сложно следить за data consistency в нескольких местах одновременно (появляется много говнокода, жестких зависимостей в коде), здесь помогает эмбер, и еще он помогает сериализовать данные из хтмл в js-объекты (в случае использования биндингов на инпуты), ну и еще много с чем помогает
Вы не натыкались в сети на open-source приложение приближенное к реальности? Или хороший пример?
опен-сорс приближенные к реальности не видел (только туду, но это так себе конечно).
из комментов в блоге эмбер знаю, что этот сайт использует его www.uniiverse.com/, но я не смотрел исходники (это не реклама:))
+146!

В нативном JS есть всё что нужно для организации кода\приложения и т.п. Есть jQuery для работы с HTML-элементами. Есть Node.js для сервера.
Есть тысячи плагинов для практических целей — красивый диалог, коннектор к базе данных, работа с Canvas или обёртка для ImageMagick, да что угодно есть!

Объясните мне хоть кто-нибудь, ЗАЧЕМ вот эти монструозные фреймворки, каждый из которых, как написали выше, продвигает свою «правильную, гениальную, всё-одной-строчкой» идею?
jQuery код в более-менее сложном приложении скатиться в лапшу и все эти «тысячи плагинов» не помогут решить вопрос организации кода и создания какой-либо архитектуры. А сейчас все меньше сайтов и все больше веб-приложений со сложной логикой. И все больше кода так скажем уходит с сервера на клиент, что заставляет искать соответствующие подходы.

Да, каждый фреймворк предоставляет свой «путь». Разработчик выбирает, что ему ближе, все в общем то как и с сервер сайд фреймворками.
С «организацией кода» и «созданием какой-нибудь архитектуры» никакой фреймворк не поможет, если разработчик не понимает, как надо организовать код. А если понимает — то крупный фреймворк (в большинстве случаев) будет избыточен.
Это просто два разных подхода. И каждый имеет право на существование. Кто-то использует «низкоуровневые» библиотеки и строит фундамент самостоятельно, кто-то испольует фреймворки, которые предоставляют базис. И так не только в мире JS. Дескутировать на тему, что лучше — можно вечно.
Чуть-чуть поясню свою позицию (если кому-то интересно): я не против фреймворков, а против избыточности. Допустим, jQuery — достаточно крупный функциональный фреймворк, но в любом крупном проекте он будет задействован по-полной — и работа с HTML-структурой, и AJAX, и CSS-анимации всякие и т.п.
А в фреймворке из статьи — например, не проще ли выкинуть чепуху вида
Welcome.Book = Ember.Object.extend({
title: null,
author: null,
genre: null
});

и просто создать банальный нативный конструктор
var Book = function(){
// всяко-разно
};
Book.prototype. //дальше уж что хотите
Не забывайте, что jquery — это не фреймворк, а библиотека. И задачи у ember и jquery разные. Будет неправильно вот так просто сравнивать их.
> Не проще ли писать на JQuery более очевидные конструкции?
На клиенте сейчас растет количестко кода и в больших приложениях jQuery просто не достаточно. jQuery это DOM обертка, которая никак не поможет вам организовать кодовую базу.

> А то получается и на стороне сервера у нас MVC и на клиенте MVC. Количество кода вырастает в разы!
Если честно то сейчас в некоторых случаях MVC(и модификации) более необходим оказывается на клиенте чем на сервере. Да и MVC архитектура пришла с десктопных аппликаций, а нынешний веб в ряде случаев все больше и больше напоминает десктоп.
ок, сам по себе подход мне нравится, но как насчет безопасности? Во первых это позволяет пользователям изучить ваш код (как бэ интеллектуальная собственность и всё такое), а во вторых вносить правки в этот код!
Понятно, что по хорошему все проверки на валидность поступающих данных нужно дублировать на бэкэнде. Но всёже, как насчет того, что любой может посмотреть и изучить ваш код?
А в чем проблема изучения аналогичного кода без применения MVC?
Я про перенос логики на клиента в целом, а не конкретно об MVC
на стороне серваре не MVC, а REST API. Ember.js это фреймворк для одностраничных приложение прежде всего.
Из статьи заметил, что работа с моделью находится в зародишевой стадии. Вытаскивать вручную данные и заполнять коллекцию не очень удобно. Тот же backbone имеет надстройки для синхронизации данных, что делает коммуникацию с сервером более прозрачной.

Те вместо
$.getJSON('data/books.json', function(data) { data.forEach(function(item){ self.pushObject(Welcome.Book.create(item)); }); });
было бы куда приятнее сделать
Welcome.Book.load()
блин, форматирование пропало :(
Там есть свой DataStore https://github.com/emberjs/data, который как раз и позволяет делать приблизительно то, что Вы хотите
var people = App.store.findAll(App.Person);
Я не смог спокойно читать эту статью, смысл все время ускользал от меня!
В свое время приглядывался к этому фреймворку, параллельно использовал backbone. Теперь активно использую angularjs. Он для меня более прозрачный и понятный, плюс у него есть такая очень крутая киллер фитча под названием AngularJS Batarang
Вроде выглядит не плохо, да еще и от гугла, вопрос только — как жить с тем, что иде будут ругаться на невалидные атрибуты
Я предпочитаю использовать не IDE с javascript. Точнее, я пишу весь клиентский код на CoffeeScript с использованием Sublime Text 2. Однако знаю что плагин для angularjs в планах для Intellij Idea.
Ох, извиняюсь, невнимательно прочел ваш комментарий. Angular поддерживает все свои аттрибуты в формате data-название-аттрибута. Любая IDE, понимающая HTML5 не будет ругаться.
Хорошая библиотечка, только я слабо понимаю, как ее совместить со статичным контентом, на случай выключенного жс у пользователя.
AngularJS предназначен для создания навороченых одностраничных приложений (аля гмайл). Если так сильно требуется охватить жалкий процент пользователей с отключенными скриптами в продукте такого типа, то почему не сделать лайт версию (как тот же гмайл).
Sign up to leave a comment.

Articles