TypeError:在emberjs中未定义newHandlerInfo

时间:2014-07-03 10:11:46

标签: javascript ember.js

我遇到了一个非常奇怪的错误:昨天我编写了一个ember.js应用程序的开头,对其进行了测试(一切正常),并将其推送到我的github repo。今天我刚刚运行了grunt serve(正如我昨天所做的那样),但我现在在浏览器控制台中得到错误TypeError: newHandlerInfo is undefined

我不知道要显示什么,因此您可以检查回购中的代码。 https://github.com/OpenCubes/OpenCubes

经过一些调试后,我发现它不会抛出错误,而是返回oldHandlerInfo的{​​{1}}个null

// Ideally we should throw this error to provide maximal
// information to the user that not enough context objects
// were provided, but this proves too cumbersome in Ember
// in cases where inner template helpers are evaluated
// before parent helpers un-render, in which cases this
// error somewhat prematurely fires.
//throw new Error("Not enough context objects were provided to complete a transition to " + targetRouteName + ". Specifically, the " + name + " route needs an object that can be serialized into its dynamic URL segments [" + names.join(', ') + "]");
return oldHandlerInfo; //  = UNDEFINED

应该抛出的错误是:

  

没有提供足够的上下文对象来完成转换   视图。具体来说,mod路由需要一个可以的对象   序列化为其动态网址段[mod_model.j_id]

1 个答案:

答案 0 :(得分:1)

您的slugs(:foo_id)应与模型上的属性名称匹配(或者您必须执行所有序列化,它最容易匹配)。它应该是唯一的,并且可以在不知道任何其他信息(即主键)的情况下找到该资源。确实最有意义的是使用您的记录的ID :id(尤其是因为您使用的是Ember数据)。

OpencubesDashboard.Router.map( ->
  @resource 'mods', path: '/'
  @resource 'mod', ->
    @resource 'mod', path: '/:id', ->
      @resource 'view', path: '/view'
      @resource 'edit', path: '/edit'

    @route('create')


)

现在你的mod路线应该使用slug名称

OpencubesDashboard.ModRoute = Ember.Route.extend(
  model: (params) ->
    @get('store').find('mod', params.id)
)

此外,您的查看和编辑资源很可能是编辑/查看mod资源上定义的资源(可能不是,我只是在猜测)。

OpencubesDashboard.ModViewRoute = Ember.Route.extend(
  model: (params) ->
    @modelFor('mod')
  setupController: (controller, model) ->
    controller.set 'model', model
    buffer = model.get('attributes').map (attr)->
      { key: attr.get('key'), value: attr.get('value') }
    controller.set 'buffer', buffer

)