我遇到了一个非常奇怪的错误:昨天我编写了一个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]
答案 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
)