2016-04-02 6 views
0

私はいくつかのユーザーデータを表示するために簡単なemberappを試しました。Ember、hasManyとbelongsToが動作しない

{ 
    "roles":[ 
     { 
     "id":5, 
     "name":"admin", 
     "alias":"Administrator", 
     "users":[ 
      { 
       "id":1, 
       "username":"Evolutio", 
       "email":"[email protected]", 
       "display_role":"Administrator" 
      } 
     ] 
     }, 
     { 
     "id":2, 
     "name":"user", 
     "alias":"Benutzer", 
     "users":[ 

     ] 
     }, 
     { 
     "id":1, 
     "name":"banned", 
     "alias":"Gesperrt", 
     "users":[ 

     ] 
     }, 
     { 
     "id":3, 
     "name":"mod", 
     "alias":"Moderator", 
     "users":[ 

     ] 
     }, 
     { 
     "id":4, 
     "name":"support", 
     "alias":"Supporter", 
     "users":[ 

     ] 
     } 
    ] 
} 

私のユーザー/ model.js:

私のAPIは、私にこのJSONを返します。この設定では

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    username: DS.attr('string'), 
    email: DS.attr('string'), 
    display_role: DS.attr('string'), 

    roles: DS.belongsTo('role'), 
}); 

と私の役割/ model.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    alias: DS.attr('string'), 

    users: DS.hasMany('user'), 
}); 

をIデベロッパーコンソールでこのエラーが発生しました:

Error while processing route: team.index Assertion Failed: Passing classes to store methods has been removed. Please pass a dasherized string instead of undefined [email protected] 

私は間違いをしませんでした。誰でも私にこれを手伝うことができるかもしれない。

答えて

0

あなたはデータをサイドロードし、このようなあなたのAPIの戻りデータを作成する必要があります:

{ 
    "users": [{ 
     "id": 1, 
     "username": "Evolutio", 
     "email": "[email protected]", 
     "display_role": "Administrator", 
     "roles": [5] 
    }], 
    "roles": [{ 
     "id": 5, 
     "name": "admin", 
     "alias": "Administrator", 
     "users": [1] 
    }, { 
     "id": 2, 
     "name": "user", 
     "alias": "Benutzer", 
     "users": [] 
    }, { 
     "id": 1, 
     "name": "banned", 
     "alias": "Gesperrt", 
     "users": [] 
    }, { 
     "id": 3, 
     "name": "mod", 
     "alias": "Moderator", 
     "users": [] 
    }, { 
     "id": 4, 
     "name": "support", 
     "alias": "Supporter", 
     "users": [] 
    }] 
    } 

あなたが行ったように、あなたがデータを埋め込む必要がある場合、あなたはhttp://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html]

[EmbeddedRecordsMixinに見たいと思うかもしれません

)燃えさしデータがそれに続き、箱から出して、それをサポートしていますので、

1)私が思う1.13.0のverから始まる((http://jsonapi.org/)JSON-APIは、次のとおりです。しかし、私はいくつかのことを提案したいです

2)考えてみてください - あなたの要件はわかりませんが、理想的にはユーザーモデルには役割との関係があります。だから私はこのように違っビットの操作を行います。一般ユーザーよりも少ない数の役割があるでしょうし、また、あなたが一つのリクエストコールですべてのデータ(ロールおよびユーザー)をロードしたいとは思わないでしょう

//user/model.js: 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
    username: DS.attr('string'), 
    email: DS.attr('string'), 
    //display_role: DS.attr('string'),//you don't need this, since user can have multiple roles and also you can access it from the user model itself by doing model.roles.forEach((role)=>{ role.alias or role.name}) 
    roles: DS.belongsTo('role') 
}); 


//role/model.js 
import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr('string'), 
    alias: DS.attr('string') 
}); 

ので。

+0

お返事ありがとうございますが、それは私がしたいことではありません。私はチームページを作ろうとしましたが、そこにユーズがリストされています。 – Evolutio

+0

彼の答えは完全に正しいです、あなたは元の問題を解決しない方法を概説することができますか? – Timm

関連する問題