【问题标题】:Implement Routing With EmberFire?使用 EmberFire 实现路由?
【发布时间】:2013-10-04 12:57:40
【问题描述】:

但是,我发现自己仍然不清楚将某些功能作为模型获得的前景。现在我正在尝试使用新的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.ObjectEmberFire.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)
    });
  }
});

我还想知道我是否不应该在我的 IndexRoute 中使用 EmberFire.Array 来生成每个帖子的链接列表。

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

我认为我在这里做了一些愚蠢的事情,并且会继续胡闹,直到我发现自己做错了什么。

【问题讨论】:

    标签: ember.js firebase emberfire


    【解决方案1】:

    您链接的 emberFire 页面上的自述文件详细说明了如何在您的 Route 中创建自定义对象。如果您谈论的是Router(与Route 不同),我认为它应该与正常情况(使用Ember Data)有任何不同。如果您遇到问题,您应该发布您尝试使用的代码以及您遇到的任何错误。如果您可以发布一个说明问题的 JSBin,那就更好了。

    【讨论】:

    • 我添加了一些基本的东西并澄清了我的问题。
    【解决方案2】:

    您可以将EmberFire.Object 附加到与帖子关联的特定网址。您需要 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)
        });
      }
    });
    

    【讨论】:

    • 谢谢,我回家试试这个
    • 尝试了您的建议,并收到了我在上面添加的错误。我认为这是因为我没有正确定义我的对象?我会继续玩,看看我能想出什么。
    • embertest2.firebaseio.com/posts/<post-id> 处是否有有效对象?似乎您正试图从一个对象访问“id”,但 URL 中没有存储一个。
    • 我没有设置ID,我假设Firebase设置的是ID?
    • 是的,Firebase 会自动设置 ID,但我会验证该位置是否确实存在数据。我还会使用 emberFire 的非缩小版本并发布未定义错误的堆栈跟踪,这将有助于调试!
    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多