Ember.js ember data 2.0和emberjs 2.0.1的路由错误

Ember.js ember data 2.0和emberjs 2.0.1的路由错误,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,从display.ember交叉发布。我使用的是Ember 2.0.1和Ember data 2.0,默认为Ember cli生成的默认RESTSerializer。我知道这个问题以前被问到过很多地方(没有一个地方有真正的答案),但我还没有找到解决办法 我有一个用户模型的模型挂钩: export default Ember.Route.extend({ model() { return this.store.findAll('user'); } }); 路由器如下所示:

从display.ember交叉发布。我使用的是Ember 2.0.1和Ember data 2.0,默认为Ember cli生成的默认RESTSerializer。我知道这个问题以前被问到过很多地方(没有一个地方有真正的答案),但我还没有找到解决办法

我有一个用户模型的模型挂钩:

export default Ember.Route.extend({
    model() {
    return this.store.findAll('user');
    }
});
路由器如下所示:

Router.map(function() {
  this.route('users', { path: '/' }, function() {
    this.route('user', { path: '/:user_id' }, function(){
    this.route('conversations', { path: '/'}, function(){
        this.route('conversation', { path: '/:conversation_id' });
    });
    });
  });
}); 
例如,转到/conversations/4转换到users.user.conversations。我的关系在我的模型中定义。在用户模型中,我有一个DS.hasMany('conversation')conversations属性,设置为{embedded:'always'}。返回的JSON如下所示:

{"conversations":[
    {
     "id":183,
     "status":"opened",
     "readStatus":"read",
     "timeAgoElement":"2015-08-20T16:58:20.000-04:00",
     "createdAt":"June 16th, 2015 20:00",
     "user":
            {
               "id":4
            }
    }
   ]}
我遇到的问题是,Ember data能够将我的数据添加到存储中,但我遇到以下错误:

Passing classes to store methods has been removed. Please pass a dasherized string instead of undefined
我读过这些帖子:还有

这是JSON响应的问题吗

多谢各位。在切换到ember 2.0.1和ember data 2.0.0之前,我使用ember数据已经有相当一段时间了,从未遇到过这个错误


编辑:我现在确定它与嵌入的对话相关,因为在ember inspector中,如果我尝试查看用户的对话(并且对话已加载到存储中),它将返回一个未解析的promiseArray。

您的对话路由具有URL
/:user\u id/:conversation\u id
。如果希望它是
/:user_id/conversations/:conversation_id
,则应将
this.route('conversations',{path:'/'},function(){
更改为
this.route('conversations',function(){
this.route('conversations',{path:'/conversations},function()){

您的对话路径有URL
/:user\u id/:conversation\u id
。如果您希望它是
/:user\u id/conversations/:conversation\u id
,您应该将
this.route('conversations',{path:'/},function(){/code>更改为
this.route('conversations',function(){/code>或
this.route('conversations',{path:'/conversations'},function(){

尽量不要直接将对象推送到存储区。可能的.push()用例:

例如,假设我们希望在 应用程序第一次启动

否则,createRecord和访问父模型的属性将自动将对象加载到存储中

在您的情况下,来自后端的UserController应该返回JSON:

{“用户”:[{“id”:1,“对话”:[183184]}]}

会话的余烬路径可能如下所示:

export default Ember.Route.extend({

    model: function(params) {
        return this.store.find('conversation', params.conversation_id);
    }
}
用户模型:

export default DS.Model.extend({
    conversations: DS.hasMany('conversation', {async: true})
});
this.store.createRecord('conversation', {user: model})
                .save()
                .then(function(conversation) {
                    model.get('conversations').addObject(conversation);
                });
您不必总是完全重新加载模型或将子记录添加到存储。例如,您可以将新对话添加到用户模型:

export default DS.Model.extend({
    conversations: DS.hasMany('conversation', {async: true})
});
this.store.createRecord('conversation', {user: model})
                .save()
                .then(function(conversation) {
                    model.get('conversations').addObject(conversation);
                });

另外,尝试遵循余烬约定,而不是对抗框架。这将为您节省大量精力和精力。

尝试不直接将对象推送到存储区。可能的.push()用例:

例如,假设我们希望在 应用程序第一次启动

否则,createRecord和访问父模型的属性将自动将对象加载到存储中

在您的情况下,来自后端的UserController应该返回JSON:

{“用户”:[{“id”:1,“对话”:[183184]}]}

会话的余烬路径可能如下所示:

export default Ember.Route.extend({

    model: function(params) {
        return this.store.find('conversation', params.conversation_id);
    }
}
用户模型:

export default DS.Model.extend({
    conversations: DS.hasMany('conversation', {async: true})
});
this.store.createRecord('conversation', {user: model})
                .save()
                .then(function(conversation) {
                    model.get('conversations').addObject(conversation);
                });
您不必总是完全重新加载模型或将子记录添加到存储。例如,您可以将新对话添加到用户模型:

export default DS.Model.extend({
    conversations: DS.hasMany('conversation', {async: true})
});
this.store.createRecord('conversation', {user: model})
                .save()
                .then(function(conversation) {
                    model.get('conversations').addObject(conversation);
                });

另外,尝试遵循余烬约定,而不是对抗框架。这将为您节省大量精力和紧张。

实际上,我希望在转换为“用户”后立即获取对话,因此我立即转换为“对话”。我想我已经解决了问题。正如我在“打破变化”一节中所读到的,我想这是因为在有效负载中找到的对话是通过App.Conversation而不是“Conversation”自动添加到存储中的。我如何更改此行为?也有一些嵌套路由。实际上,我希望在转换为“user”后立即获取对话,所以我立即转换为“对话”。我想我已经解决了问题。正如我在“打破变化”一节中读到的,我认为这是因为在有效负载中找到的对话是通过App.Conversation而不是“Conversation”自动添加到存储中的。我如何更改此行为?也存在一些嵌套路由的问题。这是可行的解决方案。不过,我选择在没有ember cli的情况下将ember和ember数据降级到1.13.x,因为ember cli和西兰花每次构建的构建时间约为35秒。这是不可接受的。非常感谢!@greenymaster69在我的macbook air上需要11秒,不要认为坚持使用不推荐的API是个好主意。我有一台MacMini,我在网络上到处阅读,找不到解决方案!我有5或6个组件,而且太简单了amn.slow.它真的是35秒:/这是一个有效的解决方案。不过,我选择在没有ember cli的情况下将ember和ember数据降级到1.13.x,因为ember cli和Brocoli每次构建的构建时间大约为35秒。这是不可接受的。非常感谢!@greenymaster69我的macbook air需要11秒,不要认为这是个问题d坚持使用不推荐的API的想法我有一台MacMini,我在网络上到处阅读,找不到解决方案!我有5或6个组件,而且太慢了。该死。太慢了。它真的是35秒:/