• Как лучше всего организовать загрузку метаданных приложения?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Странно что не ложиться на модели ember-data, а как вы их храните если не в БД?

    Как вариант добавьте поле configs к user в котором и храните все нужные настройки. В БД это поле может быть text/json на крайний случай.

    Получить нужные данные до инициализации приложения можно через initializer

    Ember.Application.initializer({
        name: 'appBootstrap',
        initialize: function(container, app) {
            app.deferReadiness(); //Останавливаем инициализацию
    
           Ember.$.ajax("urlToData").then(function(data) {
                    //Делаем нужные дела с data
                    //Положить данные в store можно так
                    var store = container.lookup('store:main');
                    store.pushPayload('data', data);
    
                    app.advanceReadiness(); //Продолжаем загрузку
           });
        }
    });


    В своих приложения я использую ember-simple-auth. Доступ к настройкам получаю через session.user.configs
    Ответ написан
    4 комментария
  • Ember, как обновить модель после создания?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Видимо дело в том что вы переходите на другую страницу еще когда не выполнился запрос, попробуйте так:

    var newPost = this.store.createRecord("post", {
                    title: this.get("title"),
                    text: this.get("text"),
                    intro: this.get("intro")
                });
                var _this = this;
                newPost.save().then(function() {
                    _this.transitionToRoute("admin.posts");
                });
    Ответ написан
  • Как получить доступ к объекту Ember, или как сохранить объект на ctrl+s?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Подход вроде не очень ember-way, вы обработчиком почти изолировались от структуры фреймворка. Вы же не все приложение собираетесь слушать, а только в каком-то разделе.

    Можно через миксин сделать в view как-нибудь так:

    App.SaveModelMixin = Ember.Mixin.create({
        onGlobalKeyDown: function() {
            Ember.$(document).on('keydown', {view: this}, this.globalKeyDown);
        }.on('didInsertElement'),
    
        offGlobalKeyDown: function () {
            Ember.$(document).off('keydown', this.globalKeyDown);
        }.on('willDestroyElement'),
    
        globalKeyDown: function (e) {
            if ((e.keyCode === 83) && (e.ctrlKey)) {
                    e.preventDefault();
                    App.Tabs.tabs("option", "active"); //узнаем активный в данный момент таб
                    console.log('ctrl + s');
                    // e.data.view - представление
                    // e.data.view.get('controller') - контроллер, можно слать экшены
                    // e.data.view.get('controller.model') - модель роута
            }
        }
    });


    Не уверен правда что это решение крутотягкское.
    Ответ написан
  • Ember js без cli, или как заставить работать эмбер на сторонних бекендах?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Нода нужна только для разработки и сборки проекта. После билда у вас статические файлы, копируйте их куда нужно на бэкенд.
    Ответ написан
  • Как динамически подгрузить маршрут в EmberJS?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    А чем вам не нравится transitionToRoute?

    Я бы сделал через параметры - /search?q=lorem+ipsum

    Не совсем понял про дублирование модели, в таком варианте его быть не должно.
    Ответ написан
  • Как в ember сделать несколько outlets?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Ответ написан
    Комментировать
  • Ember js шаблонизатор генерирует кучу script id="metamorph-84-start" script id="metamorph-84-end" - это нормально?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Так работала старая версия шаблонизатора еще на handelbars. В версии 1.8 метаморфы убрали.
    Ответ написан
    Комментировать
  • Как в ember js асинхронно грузить дерево, по узлам?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Здравствуйте.

    Грузите в роуте только верхний уровень файлов и каталогов.

    К Filefolder добавьте статус открыт каталог или нет.

    App.Filefolder = DS.Model.extend({
      type: DS.attr('string'),
      name: DS.attr('string'),
      children: hasMany('filefolder', {async: true, inverse: 'parent'}),
      parent: belongsTo('filefolder', {async: true, inverse: 'children'}),
      isOpen: false
    });

    Подправьте шаблон:
    <script type="text/x-handlebars" data-template-name="filefolders">
    {{#each controller }}
    {{name}} {{type}} 
    {{#if isOpen}}
        <ul>
            {{#each children itemController="filefolder"}}
                <li>{{name}} <span {{action "loadChild" }}>(o)</span></li>
            {{/each}}
        </ul>
    {{/if}}
    {{/each}}
    </script>


    Добавьте action который будет переключать состояние isOpen.

    Включите возможность загружать файлы-каталоги скопом:

    App.ApplicationAdapter = DS.RESTAdapter.extend({
        coalesceFindRequests: true
    });


    Как-то так должно работать.
    Ответ написан
  • Что выбрать для SPA?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Напишу про Ember.js

    1) Богатый интерфейс с множеством форм

    Используйте ember-easy-form

    2) Авторизация и разделение пользователей по ролям

    За роли не подскажу, а для авторизации ember-simple-auth лучший выбор, имеет несколько стратегий авторизаций из коробки, и можно дописать свои.

    3) Различные уведомления о новых событиях (пришла почта, менеджер спустил задачу, приближается срок выполнения и т.п.)

    Ember.js для работы своего хранилища использует адаптеры и сериалайзеры. Из коробки - REST, ActiveModel, Fixture. Их можно указывать для всего приложения разом, и для конкретного типа модели в частности. Мы для работы уведомлений и чата расширили адаптер и сериалайзер для WebSockets, и у нас все приложение работало через REST, а при авторизации поднимается сокетное соединение именно для этих моделей.

    5) Относительно быстрый старт для написания прототипа

    Большинство вещей у вас получится быстро. Для некоторых придется разобраться, например

    9c825e1346814dc480235fd95adfdbf7.jpg

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

    Материалы для изучения с официального сайта уж очень поверхностны на первый взгляд, а где смотреть готовые примеры не нашел.

    Я работаю примерно по такой схеме:
    1. Так как модели в DS по сути повторяют структуру БД (реляционной), начинаю я с созданя моделей. Если API не готов, использую FIXTURES.
    2. Затем пишем роутер, для нужного раздела.
    3. Если требуется - контроллер + темплейт делаются обычно одновременно так как взаимосвязаны.
    4. В зависимости от задачи, дописываются компоненты, расширяются классы и пр., если задача еще не решена, переходим к пункту 1.

    Возможно ли с ним быстро "стартануть" и сделать некий прототип приложения?

    Попробуйте написать прототип, без вещей которым могут вызвать сложности, если понравиться все походит, добавите и авторизацию и сокеты и пр.
    Ответ написан
    Комментировать
  • Добавление записи к hasMany() в emberjs. Как сделать?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Если вы хотите добавить новый post после его создания в категорию то делайте так:

    var newPost = this.store.createRecord('post', {
      title: this.get('title'),
      body: this.get('body'),
      url_pic: this.get('url_pic'),
      publish: new Date().getTime()
    });
    
    var _this = this;
    
    newPost.save().then(function(newPost) {
      _this.get('category.posts').pushObject(newPost);
    }, function() {
      newPost.rollback();
    });


    Если нет, то объясните что вы хотите сделать, по коду и картинке это плохо понятно.
    Ответ написан
  • REST API как лучше передавать токен?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Как лучше передавать токен, как параметр запроса или в хедере ?

    Я параметром запроса не встречал, всегда передаем заголовком.

    Параметрами старайтесь пользоваться только в качестве фильров, limit, offset, sort и подобное. То-есть то что относиться непосредственно к ресурсу с которым работаете.
    Ответ написан
    1 комментарий
  • Как задать action в itemController?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Привет. Добро пожаловать в Ember сообщество.

    А зачем тут вообще itemController? Я бы сделал так:

    {{#each item in model}}
    <div>
        <h1>{{item.name}}</h1>
        <a {{action "removeItem" item}}>remove</a>
    </div>
    {{/each}}

    App.ListController = Ember.Controller.extend({
      actions: {
        removeItem: function(model) {
          model.destroyRecord();
        }
      }
    });


    Или если у вас предполагается какая-то логика элементов списка, то вам нужно использовать компоненты:

    App.ItemListComponent = Ember.Component.extend({
      item: null,
    
      actions: {
        removeItem: function() {
          var item = this.get('item');
          item.destroyRecord();
        }
      }
    });


    {{#each item in model}}
        {{item-list item=item}} //извиняюсь за тавтологию
    {{/each}}


    то есть action в дочернем контроллере не перехватывается, если вставить в ListController нужный action

    Передаются от контроллера к роуту, а затем от роута к роуту вверх по цепочке.

    action-bubbling.png
    И может кто посоветовать какие-нибудь материалы по изучению, а то официальный гайд ответы на все вопросы не дает, он описывает все отдельными примерчиками, а какого-то комплексного подхода ко всему не дает. Даже немного обескураживает такой простой момент, что в гайде показывают как использовать ObjectController, но при попытке использования выдается информация, что уже deprecated, используйте просто Controller. Соответственно использование ObjectController и itemController непосредственно в шаблоне решает вопрос с экшеном в дочернем, но при переделке под "новые" стандарты (Controller и itemController в коде контроллера) работать перестает.


    Сейчас такого комплексного актуального туториала наверное и не найти, Ember развивается семимильными шагами.

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

    Да не нормальный вопрос.
    Ответ написан
    3 комментария
  • Интерактивная карта для сайта с возможностью редактирования данных?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Можете попробовать на Drupal 7 собрать из различных модулей.

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

    В качестве движка для работы с картой рекомендую leafletjs.
    Ответ написан
    1 комментарий
  • Ember, как скомпилировать шаблоны?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    А почему вы не хотите компилировать nodejs и подсовывать готовым статическим файлом в .net?
    Ответ написан
    6 комментариев
  • Как оценить стоимость приносящего прибыль сайта?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Что-то 24 месяца как-то мало, вроде меньше чем на 3 года не оценивают, к тому же учитывая как упали прибыли с рекламы за последние пол года, оцениваются они не очень. Не самое удачное время продавать.

    Рост учитывать можно и нужно при оценке, можно на основании темпов последних лет.
    Ответ написан
    Комментировать
  • Можно ( как ) запускать/разрабатывать приложения без node.js на ember.js?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Можно без ember-cli и node.js, правда будет не так удобно.

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

    Добавьте тег django, тут вопрос скорее в эту область.
    Ответ написан
  • Впечатления от sails.js?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Что никто не использует Sails.js?

    Update 20.01.2016
    Я использовал (4 месяца), Sails.js в одном проекте в качестве бекенда для API. Сначала впечатления были хорошие, но углубляясь в проект, я понял что Sails.js ужасен.

    1. Он не развивается. Вообще. Как была год назад версия 0.11, такая она и сейчас. И такая же будет через год.
    2. Утечки памяти. Гуглил, нашел что рекомендуют отключить сокеты. Отключил, утечки стали меньше, но не прошли.
    3. Ужасная, просто ужасная ORM Waterline. Не годна для проектов сложнее чем hello world. Полу нерабочие связи. Нет сложных индексов, транзакций. У меня 2 раз падал Sails при старте на стадии миграции и тер нафиг все данные в БД. И эту ORM невозможно выпились или заменить. Он внутри Sailsa.

    Не используйте Sails.js
    Ответ написан
  • EmberFire ошибка при попытке отправки данных на сервер. Что делаю не так?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Где-то упустили значение, EmberFire тут может и ни причем. Дебажте глубже, найдите место которое вызывает исключение.
    Ответ написан
    Комментировать
  • Что выбрать, Yii2 или Laravel?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Еще небольшой показатель - упоминаемость на рынке вакансий/фриланса. По идее чем востребованней тем легче будет найти работу.

    Рекомендую смотреть не только на отечественных площадках.
    Ответ написан
    1 комментарий
  • Front-end для web api( asp.net mvc), на чем писать?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Наверное вам нужно отталкиваться от fronted фреймворка который вы используете.

    Я в проектах работаю с Ember.js, а для авторизации библиотеку ember-simple-auth.

    В ней можно использовать готовые модули для авторизации: devise, torii, oauth2 или написать кастомный авторизатор под свой сервер (я так и делаю). Токен можно хранить в localStorage или в cookie.

    Вот пример кастомной авторизации, как видно ничего страшного.
    Ответ написан