Ответы пользователя по тегу Ember.js
  • Yii2 REST + EmberJS?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Если в параметрах поля модели поставить async: false, Ember будет ожидать модель в моделе, как в вашем первом варианте. Но этот вариант так себе, лучше поищите готовый serializer для Yii2 или напишите свой.
    Ответ написан
  • Почему не обновляется шаблон после удаления записи?

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

    this.notifyPropertyChange('model');
    Ответ написан
  • Как повесить колбек, на полную загрузку данных ember?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    В таких случаях нужно использовать промисы, не только в Ember.js, а вообще в javascript.

    В Ember для реализации промисов используется библиотека RSVP (Tutorial with Examples).

    App.EditorTabsComponent = Ember.Component.extend({
      didInsertElement: function() {
        var _this = this;
        Ember.RSVP.Promise.resolve(this.get('data')).then(function(chartData) {
          App.Tabs = _this.$().tabs();
          App.Tabs.tabs('refresh');
        });
      },
    });


    Где data это данные которые подгружаются с сервера. Если передать данные которые не нужно ожидать, то есть они уже загружены, промис выполнится сразу.
    Ответ написан
    Комментировать
  • Как узнать, загружен ли связанный объект в локальное хранилище ember?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    покажет сырые данные поля ava, это либо null, либо объект, либо число
    user.get('data.ava');

    вернет модель если она была загружена, либо null
    store.getById('ava', user.get('data.ava'));
    Ответ написан
    Комментировать
  • Как подружить ember и jquery UI?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Модуль контекстного меню не использовал, но другими модулями jQuery UI постоянно.

    В консоле что-нибудь выводится?

    У вас есть есть ошибки в коде:
    1. Название компонента состоят из двух слов минимум, а у вас из одного;
    2. Название функции initialize очень стремное, замените на что-нибудь вроде contextMenuInit;
    3. this._super(); соответственно выкидываем;
    4. Зачем брать функцию в скобки? Может и работает, но это не по коде стайлу.

    App.XNodeComponent = Ember.Component.extend({
      contextMenuInit: function() {
          this.$().contextmenu({
            delegate: ".hasmenu",
            menu: [
                {title: "Copy", cmd: "copy", uiIcon: "ui-icon-copy"},
                {title: "----"},
                {title: "More", children: [
                    {title: "Sub 1", cmd: "sub1"},
                    {title: "Sub 2", cmd: "sub1"}
                    ]}
                ],
            select: function(event, ui) {
                console.log("select " + ui.cmd + " on " + ui.target.text());
            }
          });
      }.on('didInsertElement')
    });


    {{x-node}}

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

    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();
    });


    Если нет, то объясните что вы хотите сделать, по коду и картинке это плохо понятно.
    Ответ написан
  • Как задать 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 комментария
  • Ember, как скомпилировать шаблоны?

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

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

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

    Добавьте тег django, тут вопрос скорее в эту область.
    Ответ написан
  • EmberFire ошибка при попытке отправки данных на сервер. Что делаю не так?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Где-то упустили значение, EmberFire тут может и ни причем. Дебажте глубже, найдите место которое вызывает исключение.
    Ответ написан
    Комментировать
  • Ember + YII(CakePHP, CI) какие нибудь учебные материалы?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    Ember-data связывается с api по принципам jsonapi.org так что гуглите yii rest api
    Ответ написан
    Комментировать