无法设置未定义的属性“全部”

Posted

技术标签:

【中文标题】无法设置未定义的属性“全部”【英文标题】:Cannot set property 'all' of undefined 【发布时间】:2015-08-24 13:39:37 【问题描述】:

我在 Ember.JS 应用程序中获取来自 API 的响应时遇到问题。我正在使用“虚拟”API 来学习 Ember,但我不想创建自己的后端 (this one specifically)。

每当我尝试导航到 Posts 模板时,我都会收到以下错误:

Error while processing route: posts Cannot read property 'all' of undefined TypeError: Cannot read property 'all' of undefined
    at App.PostsRoute.Ember.Route.extend.model (file:///C:/Users/staff-ch/Documents/ember/js/app.js:24:18)
    at EmberObject.default.extend.deserialize (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:22318:19)
    at applyHook (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:45113:32)
    at Object.HandlerInfo.runSharedModelHook (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:43114:22)
    at Object.subclass.getModel (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:43340:21)
    at __exports__.bind (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:44982:19)
    at tryCatch (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:45439:16)
    at invokeCallback (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:45451:17)
    at publish (file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:45422:11)
    at file:///C:/Users/staff-ch/Documents/ember/js/libs/ember-1.12.0.debug.js:26472:7

以下是相关代码:

App = Ember.Application.create();

App.ApplicationAdapter = DS.RESTAdapter.extend(
    host: 'http://jsonplaceholder.typicode.com/'
)

App.Router.map(function() 
  ...
  this.resource('posts');
);

App.Post = DS.Model.extend(
    userId: DS.attr(),
    title: DS.attr(),
    body: DS.attr()
);

App.PostsRoute = Ember.Route.extend(
    model: function()
        return DS.store.all('posts');
    
);

我怀疑这可能与返回的 JSON 格式有关,但我不确定,如果是这种情况,我不确定如何修复它。我显然无法更改返回的 JSON 的格式,但是我知道DS.RESTSerilaizer,但我不确定如何使用它。响应示例:

[
  
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
  ,...
]

【问题讨论】:

【参考方案1】:

1) 只是

App.PostsRoute = Ember.Route.extend(
  model: function()
    return this.store.all('post');
  
);

改为return DS.store.all('posts');

DS.Store 作为store 属性注入到路由中。

2) 您的回复必须是 root posts

【讨论】:

return this.store.all('post'); 更改为 return DS.store.all('posts'); 会导致相同的错误。我无法更改 JSON 的格式,所以我需要对其进行序列化 您的回复必须有根“帖子” 请问我如何使用DS.RESTSerializer 来做到这一点? 我已经为你创建了带有 mockjax 的工作 jsbin。看jsbin.com/doneyohawa/edit?html,js,output 我现在可以使用它了。我导入脚本的方式似乎有问题。很奇怪。

以上是关于无法设置未定义的属性“全部”的主要内容,如果未能解决你的问题,请参考以下文章

反应音频无法设置未定义的属性“音量”

JavaScript - 无法设置未定义的属性

JavaScript - 无法设置未定义的属性

未捕获的类型错误:无法设置未定义的属性 [重复]

未捕获的类型错误:无法设置未定义的属性(设置“isSubcon”)

未捕获的类型错误:无法设置未定义的属性“索引”