Ответы пользователя по тегу Backbone.js
  • Сортировка/фильтрация в Backbone?

    aen
    @aen
    Keep calm and 'use strict';
    Вы все верно предложили. Чаще всего только так и можно сделать. Главное в DOM вставлять сразу всю отрендеренную коллекцию, а не по одной вьюшке. И не забывать подчищать за собой в случае, если есть какие то лихие биндинги.
    Ответ написан
    2 комментария
  • Имеет ли смысл посмотреть на другие client-side MVC фреймворки, если я сейчас очень хорошо разбираюсь в Backbone.Marionette?

    aen
    @aen
    Keep calm and 'use strict';
    Сам термин "удобные" весьма субъективен. Кроме того, я не устаю повторять, что "серебряной пули" нет. Не существует идеального фреймворка. Смотреть нужно другие обязательно, хотя бы только для того, чтобы понимать, что какие то ваши задачи можно решить иначе. Это очень расширяет мышление.

    Мне довелось наблюдать "backbone" головного мозга. Когда разработчик так привык к backbone, что всю логику строил только на сущностях этой библиотеки. И когда у него возникали проблемы с этим, то вместо того, чтобы использовать какие-то нативные js-инструменты, он просто обвешивал лапшой модельки и коллекции.

    У того же backbone есть приличное количество расширений и плагинов. Изучите их. Порой они решают достаточно сносно некоторые задачи.

    Тот же React.js вполне можно использовать в качестве замены Backbone.View. Так же есть идеи о применении подхода Flux при разработке на Marionette. Тоже полезно для ознакомления. Где-то мне на глаза попадался Backbone.Dispatcher.

    Суть: ищите и обрящите. От себя могу добавить только вот эту мою подборку ресурсом в Backbone.
    Ответ написан
    Комментировать
  • Есть ли у вас утечки памяти в backbone?

    aen
    @aen
    Keep calm and 'use strict';
    В backbone были проблемы, связанные с вложенными вьюшками. Пример: у вас есть родительская вьюшка, в которую вложены дочерние вьюшки. Что произойдет если удалить родительскую вьюшку? Дочерние вьюшки останутся в памяти, вот тут собственно и течет. Но это уже дело не в backbone, в рукожопстве разработчика.
    Или можно из одной вьюшки удалить контейнер другой вьюшки, тоже потечет, но это тоже рукожопство.
    В Model и Collection нечему течь.

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

    На моей памяти были еще танцы с виджетами jQuery UI, которые каждый раз инициализировались. Но это снова о рукожопстве.

    Так что вам следует проверить уважаемого front-end программиста компании iconto проверить на рукожопство. Может быть backbone ни в чем не виноват.
    Ответ написан
    Комментировать
  • Как в Backbone изменять модель в подвью?

    aen
    @aen
    Keep calm and 'use strict';
    Вообще лучше всего соблюдать правило "Одна модель - одна вьюха". В вашем случае, это первый вариант. Тогда старшая вьюха Vote будет играть роль лэйаута. При условии, что не стоит размазывать модель на две вьюхи.

    Вообще есть приличное количество материалов по работе с вложенными вьюхами в backbone. В marionette.js для вашего случая есть даже готовые сущности: Region и LayoutView.
    Ответ написан
    4 комментария
  • Почему не работе eahe для коллекции?

    aen
    @aen
    Keep calm and 'use strict';
    Метод each итерирует объект по его свойствам, либо массив по элементам. В вашем случае итерирование происходит по объекту. Вот только модели коллекции лежать в свойстве models вашей коллекции. Потому итерируйте по нему. То есть:
    _.each(col1.models, function(val, key){
        console.log( key, val )  
      })

    Для удобства работы можно создать свой "класс" коллекций и расширить его методом each:
    var Collection = Backbone.Collection.extend({
      each: function (fn) {
        _.each(this.models, fn);
      }
    });
    
    var myColl = new Collection();
    
    // Итерирование
    myColl.each(function(model) {
        // какая-то логика работы с моделью
    });
    Ответ написан
  • Какой Js mvc framework посоветуете?

    aen
    @aen
    Keep calm and 'use strict';
    Этот вопрос уже был задан пару сотен раз и пару сотен раз все советовали то, чем пользуются сами.

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

    Никто и никогда не сможет вам сказать, что вам подойдет какой-то конкретный фреймворк.

    Более того, проекты развиваются, появляются новые задачи. Не раз бывало так, что при первоначальном выборе одного из фреймворков все шло гладко. Но в определенный момент приходили новые требования, которые было проще бы реализовать на другом фреймворке. Но разве это повод все переписывать? Конечно, нет.

    Если вам нравится canjs и он решает ваши задачи, то пишите на canjs и не слушайте никого.

    П.С.: Вам полезно будет прочитать вот этот вопрос Какой Javascript framework выбрать для новичка?
    Ответ написан
    Комментировать
  • Где можно посмотреть пример сложного приложения на backbone.js?

    aen
    @aen
    Keep calm and 'use strict';
    Есть planetexpressapp. Это приложение, разработку которого описывает Брайен Манн в своем скринкасте backbonerails. Правда, написано оно на coffeescript.
    Ответ написан
    2 комментария
  • Marionette.js, как правильно хранить коллекцию, которая используется несколькими модулями?

    aen
    @aen
    Keep calm and 'use strict';
    Если вам нужно, чтобы ваша коллекция работала и была доступна всегда, то нет никакого смысла хранить ее в модуле, в котором есть что-то еще. Она отдельная сущность, доступ к которой вам нужно организовать через шину событий, которую вам даст Backbone.Wreqr.

    В вашем описании "модуль пользователей" не тождественнен коллекции. Насколько я понимаю, у вас есть некий кусок логики, который отвечает за пользователей и который работает с коллекцией. Тогда в вашем случае вам надо выключать только этот кусок логики, а коллекцию оставить в покое. Тогда доступ к ней будет всегда.
    Ответ написан
    Комментировать
  • Почему не удается подключить внешний шаблон?

    aen
    @aen
    Keep calm and 'use strict';
    Если вы хотите подгружать шаблоны, то используйте require.js. У него есть плагин для загрузки шаблонов. https://github.com/requirejs/text
    Ответ написан
  • Marionette.js (Backbone) - Как правильно организовать модульную структру?

    aen
    @aen
    Keep calm and 'use strict';
    Как вариант вам нужно для каждой страницы определить свой лайаут, в котором прописать те модули, которые нужны. При смене роута просто рендерить нужный лайаут.
    Ответ написан
    Комментировать
  • Использовать RequireJS или воспользоваться другим сборщиком?

    aen
    @aen
    Keep calm and 'use strict';
    Попробуйте грузить шаблоны на мастерпейдже. Тогда на момент старта js у вас уже будут все шаблоны. У вас явно есть какие-то тяжелые библиотеки. Например, jquery. Их можно не собирать, а грузить с CDN.

    Далее, раз у вас есть 8-10 модулей, то лучше соберите их отдельно друг от друга.
    Ответ написан
    Комментировать
  • Backbone. Коллекция внутри модели?

    aen
    @aen
    Keep calm and 'use strict';
    Несколько более навороченный вариант.
    А вот это должно максимально подойти.
    Ответ написан
    4 комментария
  • Вопрос по архитектуре с вложенными Collection, View?

    aen
    @aen
    Keep calm and 'use strict';
    Лучше разбейте на три коллекции. У вас будет одна модель, одна коллекция, view на модель, view на коллекцию и какая то внешняя разметка с логикой прокрутки коллекций (карусель какая-нибудь).
    Ответ написан
    5 комментариев
  • Как передать данные в шаблон после выполнения .fetch()?

    aen
    @aen
    Keep calm and 'use strict';
    Я бы сделал вот так:
    initialize: function () {
            this.template = $.tpl['profile-form'];
            this.model.fetch({
                data: $.param({email: localStorage.getItem('user_email')}),
                type: 'POST',
            }).done(this.render);
        },
    
        render: function (eventName) {
            this.$el.html(this.template(this.model.toJSON()));
            return this;
        }

    Респонс не надо проверять, потому как фетч вам модель заполнит.
    Ответ написан
    Комментировать
  • Как передать данные в шаблон после выполнения .fetch()?

    aen
    @aen
    Keep calm and 'use strict';
    JSON.parse(JSON.stringify(response))
    Это зачем? Клонируете данные?
    Ответ написан
    Комментировать