我是 Ember js/node js/mongo db 的菜鸟,发现很难实现一个简单的案例。我使用nodejs和mongoose作为后端,并使用emberjs作为前端。要求是:
一个用户可以属于多个组织,一个组织可以拥有多个用户。用户可以是管理员或客户。这就是我在后端建模的方式:
models/organization.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var OrganizationSchema = new Schema({
org_name: String,
org_address: String,
org_admins: [{ type: Schema.Types.ObjectId, ref: 'User' }],
org_customers: [{ type: Schema.Types.ObjectId, ref: 'User' }]
});
module.exports = mongoose.model('Organization',OrganizationSchema);
models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new Schema({
username: {type: String, unique: true},
password: String,
role: String,
//organizations: [{type: Schema.Types.ObjectId, ref: 'Organization'}]
});
module.exports = mongoose.model('User',UserSchema);
然后我就为用户提供了 CRUD。我创建了一些组织,将一些用户 ID 存储为 org_admins,另一些存储为 org_customers。
我想创建一个索引 View ,其中显示所有组织以及相应的管理员和相应的客户。
这是基本模板现在在浏览器上的显示方式:
Organizations:
Org1 address1
admins:
5534a5172751c5b05b7e7cd0
5534cb359262868030211796
Customers:
org2 address2
admins:
5534a5172751c5b05b7e7cd0
customers:
5534cb359262868030211796
我希望显示管理员的用户名和客户的用户名。
这是 Ember 端代码:
app/models/organization.js
import DS from 'ember-data';
export default DS.Model.extend({
org_name: DS.attr('string'),
org_address: DS.attr('string'),
org_admins: DS.attr(),
org_customer: DS.attr()
});
app/models/user.js
import DS from 'ember-data';
var User = DS.Model.extend({
username: DS.attr('string'),
password: DS.attr('string'),
role: DS.attr('string')
});
export default User;
这是模板文件app/templates/organization.hbs
<ul>
Organizations:
<p>
{{#each organization in model}}
<li>
<label> {{organization.org_name}} </label>
<label> {{organization.org_address}}</label>
<p> <label> admins: </label></p>
<ul>
{{#each admin in organization.org_admins}}
<li>{{admin}}</li>
{{/each}}
</ul>
<p> <label> Customers: </label></p>
<ul>
{{#each customer in organization.org_customers}}
<li>{{customer}}</li>
{{/each}}
</ul>
</li>
{{/each}}
</p>
</ul>
<p>
<button {{action 'neworganization'}} > Add Organization </button>
</p>
{{outlet}}
路线文件 应用程序/路线/organizations.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function(){
return this.store.find('organization');
}
});
我继续在 Controller 中获取用户名,但它不起作用。 我知道我在建立关联模型时做错了。我也尝试使用 DS.hasMany 而不是 DS.attr(),但无法实现我的动机,我可能做错了什么,没有正确理解关联。
我能做到这一点的正确方法是什么?请帮忙。
最佳答案
查看指南中有关定义关系的部分 http://guides.emberjs.com/v1.11.0/models/defining-models/
当您使用DS.hasMany
时,您需要在另一个模型上有一个相应的DS.belongsTo
。
另一件需要注意的事情是确保您在组织响应负载中包含所有相应的用户模型,或者使用 {async: true}
标记关系,以便 ember 知道检索这些模型如果需要的话单独记录。
关于javascript - ember js关联访问后端nodejs mongoose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29766025/