Реализовать маршрутизацию с EmberFire?

Тем не менее, я все еще неясен в отношении перспективы получения некоторых функциональных возможностей в качестве модели. Сейчас я пытаюсь использовать новую библиотеку emberFire, которая предоставляет некоторые базовые типы объектов для взаимодействия со службой Firebase.

Я могу создавать новые объекты и массивы объектов, но не могу правильно настроить маршруты.

  • Могу ли я расширить свой базовый App.Model как один из объектов EmberFire, чтобы использовать более стандартные подходы для извлечения и обработки данных?

редактировать

Когда я попытался использовать предложение в ответе 2, я получил эту ошибку:

Uncaught TypeError: Cannot read property 'id' of undefined

Поэтому я попытался добавить в:

App.Post = EmberFire.Object.extend({
  id: null,
  body: null
});

Чтобы, возможно, определить Объект, однако я чувствую, что я тоже поступаю неправильно?

Редактировать 2

Вот мой текущий материал:

App = Ember.Application.create();

App.Router.map(function() {
    this.resource('post', { path: '/:post_id' }, function() {
        this.route('edit');
     });
});

App.Post = EmberFire.Object.extend({
      id: null,
      title: null
});

Как я уже упоминал выше, я попытался определить свой объект как EmberFire.Object а также EmberFire.Arrayи попытался подключить App.Post.create в моем маршруте.

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return EmberFire.Array.create({
      ref: new Firebase("https://embertest2.firebaseio.com/posts/")
    });
  }
});

App.PostRoute = Ember.Router.extend({
  model: function(params) {
    return EmberFire.Object.create({
      ref: new Firebase("https://embertest2.firebaseio.com/posts/" + params.post_id)
    });
  }
});

Мне также интересно, если я не должен использовать EmberFire.Array в моем IndexRoute генерировать по существу список ссылок для каждого поста.

App.IndexController = Ember.ArrayController.extend({
    title: "",
    actions: {
      addPost: function() {
        this.pushObject(this.get('title'));
      }
    }
});

В настоящее время моей целью является создание каждой записи сообщения, ее заполнение в списке, создание ссылок на каждое сообщение и возможность редактирования каждой записи сообщения на странице сообщения.

Вот текущая ошибка, которую я получаю:

    Uncaught TypeError: Cannot read property 'id' of undefined      ember.js:30274
    serialize       ember.js:30274
    paramsForHandler        ember.js:29636
    Router.generate         ember.js:29457
    Ember.Router.Ember.Object.extend.generate       ember.js:30524
    (anonymous function)        ember.js:32438
    ComputedPropertyPrototype.get       ember.js:4446
    get         ember.js:1937
    (anonymous function)        ember.js:20674
    Ember.EnumerableUtils.forEach       ember.js:1805
    Ember.View.Ember.CoreView.extend._applyAttributeBindings        ember.js:20655
    Ember.View.Ember.CoreView.extend.applyAttributesToBuffer        ember.js:21128
    Ember.View.Ember.CoreView.extend.beforeRender       ember.js:21107
    Ember.CoreView.Ember.Object.extend._renderToBuffer      ember.js:19458
    Ember.View.Ember.CoreView.extend._renderToBuffer        ember.js:21096
    superWrapper        ember.js:1239
    (anonymous function)        ember.js:19440
    Ember.Instrumentation.instrument        ember.js:1683
    Ember.CoreView.Ember.Object.extend.renderToBuffer       ember.js:19439
    Ember.merge.appendChild         ember.js:21941
    Ember.View.Ember.CoreView.extend.appendChild        ember.js:21291
    EmberHandlebars.ViewHelper.Ember.Object.create.helper        ember.js:25821
    (anonymous function)        ember.js:25999
    (anonymous function)        ember.js:32685
    program1
    program         handlebars-1.0.0.js:2251
    Ember.View.Ember.CoreView.extend.render         ember.js:20522
    Ember.CoreView.Ember.Object.extend._renderToBuffer      ember.js:19459
    Ember.View.Ember.CoreView.extend._renderToBuffer        ember.js:21096
    superWrapper        ember.js:1239
    (anonymous function)        ember.js:19440
    Ember.Instrumentation.instrument        ember.js:1683
    Ember.CoreView.Ember.Object.extend.renderToBuffer       ember.js:19439
    Ember.merge.renderToBufferIfNeeded      ember.js:21887
    Ember.View.Ember.CoreView.extend.renderToBufferIfNeeded         ember.js:21103
    Ember.merge.ensureChildrenAreInDOM      ember.js:22563
    Ember.ContainerView.Ember.View.extend._ensureChildrenAreInDOM       ember.js:22528
    DeferredActionQueues.flush      ember.js:5484
    Backburner.end      ember.js:5568
    (anonymous function)        ember.js:5822

Я полагаю, что я делаю здесь что-то глупое и буду продолжать дурачиться, пока не наткнусь на то, что я сделал неправильно.

2 ответа

Вы можете прикрепить EmberFire.Object на конкретный URL, который связан с сообщением. Вам понадобится post_id, чтобы сделать это:

App.PostRoute = Ember.Router.extend({
  model: function(params) {
    return EmberFire.Object.create({
      ref: new Firebase("https://embertest2.firebaseio.com/posts/" + params.post_id)
    });
  }
});

README на странице emberFire, на которую вы ссылались, подробно описывает, как создавать свои собственные объекты в вашем Route, Если вы говорите о Router (который отличается от Route), Я не думаю, что это должно быть иначе, чем обычно (с Ember Data). Если у вас возникли проблемы, вы должны опубликовать код, который вы пытались использовать, и любые ошибки, которые вы получаете. Если вы можете опубликовать JSBin, иллюстрирующий проблему, это будет еще лучше.

Другие вопросы по тегам