2015-02-24 56 views
1

我有这个模型,当使用此路由器和模型导航到此路由时会引发错误。这是导致问题的注册表。Ember数据错误:型号:@ each`,必须是“type:name”的形式

寄存器路线模型:

export default DS.Model.extend({ 
    newUser: DS.belongsTo('user'), 
    password: DS.attr('string') 
}); 

我使用该模型的寄存器路线:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: function() { 
    return this.store.find("account-type"); 
    } 
}); 

这里是我的路由器:

Router.map(function() { 
    this.route('login'); 
    this.route('register'); 
    this.route('my-account'); 
    this.route('change-password'); 

    this.route('app', function() { 
    this.resource('profile', {path: 'profile/profile_id'}); 
    this.route('connections'); 
    this.resource('conversation', {path: 'conversation/conversation_id'}); 
    }); 

    this.resource('myAccount', function() {}); 
    this.route('user'); 
}); 

用户模型:

export default DS.Model.extend({ 
    title: DS.attr('string'), 
    firstName: DS.attr('string'), 
    surname: DS.attr('string'), 
    dateOfBirth: DS.attr('string'), 
    telephoneNumber: DS.attr('string'), 
    accountType: DS.belongsTo('accountType'), 
    emailAddress: DS.attr('string'), 

    //used to present full-name 
    fullName: function() { 
    return this.get('title') + ' ' + 
     this.get('firstName') + ' ' + 
     this.get('surname'); 
    }.property("title", "firstName", "surname") 

}); 

错误我得到:

model:@each`, must be of the form `type:name 

这是我得到的堆栈跟踪:

Error while processing route: register Invalid fullName: `model:@each`, must be of the form `type:name` TypeError: Invalid fullName: `model:@each`, must be of the form `type:name` 
    at __exports__.default.EmberObject.extend.resolve (http://localhost:4200/assets/vendor.js:16812:17) 
    at Object.resolve [as resolver] (http://localhost:4200/assets/vendor.js:16434:25) 
    at resolve (http://localhost:4200/assets/vendor.js:14970:32) 
    at Object.Container.resolve (http://localhost:4200/assets/vendor.js:14550:16) 
    at factoryFor (http://localhost:4200/assets/vendor.js:15053:31) 
    at Object.Container.lookupFactory (http://localhost:4200/assets/vendor.js:14657:16) 
    at Ember.Object.extend.modelFactoryFor (http://localhost:4200/assets/vendor.js:73164:31) 
    at ember$data$lib$serializers$json_serializer$$default.extend.extractArray (http://localhost:4200/assets/vendor.js:67267:22) 
    at apply (http://localhost:4200/assets/vendor.js:32891:27) 
    at superWrapper (http://localhost:4200/assets/vendor.js:32459:15) 

我不知道是否有我的模拟呢?

apprev:

accountTypesRouter.get('/', function (req, res) { 
    res.send(
     ["foo", "boo"] 

     /* 
      [ 
     {"id": 1, "type": "foo"}, 
     {"id": 2, "type": "baa"} 
     ] 
     * */ 

    ); 
    }); 
+0

你介意发布错误的完整堆栈跟踪?也请告诉我们您正在使用的Ember和Ember-Data的版本。 – GJK 2015-02-24 14:01:24

+0

@GJK加了谢谢 – SuperUberDuper 2015-02-24 14:43:19

+0

@GJK也许是因为我的路线模型是空的,我没有在路线上填充它 – SuperUberDuper 2015-02-24 14:44:37

回答

2

你的API需要返回以某种方式格式化的JSON数据。 Ember需要一个与模型名称一致的对象。所以像这样:

{ 
    accountTypes: [{ 
     id: 1, 
     type: 'foo' 
    },{ 
     id: 2, 
     type: 'boo' 
    }] 
} 

如果你无法控制从API终端返回,写DS.RESTSerializer到JSON转成一些灰烬数据就是了。例如,如果你的服务器负载看起来是这样的:

[{id:1, type:'foo'},{id:2, type:'boo'}]

你可以写这样的串行:

import DS from 'ember-data'; 
export default DS.RESTSerializer.extend({ 
    extractArray: function(store, type, payload) { 
     payload = { 
      'accountTypes': payload 
     }; 
     return this._super(store, type, payload);  
    }, 
}); 

由于@Kori指出的那样,DS.RESTAdapter docs简要讨论了JSON格式灰烬数据预计, 。

相关问题