javascript - ember js关联访问后端nodejs mongoose

标签 javascript node.js mongodb ember.js ember-data

我是 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/

相关文章:

javascript - 如何从 angularJs 连接 signalR

node.js - AngularJS 和 NodeJS 中的 View 模板引擎在概念上有什么区别?

javascript - 如何将不同表中的字段值映射到 API 中的 ID?

javascript - RXJS 可观察评估多次?

javascript - 使用 process.exit() 时并不总是保存 Winston 日志文件 - Node js

javascript - Cheerio,如何将其提取为json?

c# - MongoDb C# - 如何在文档中存储 GeoJSON

javascript - 使用 'this' 引用与meteor.template.rendered

javascript - 我如何将 dd-mm-yyyy 之类的日期转换为 ISO 日期格式,以存储在 mongoDB 中

javascript - 我想更改传单中一层的图标颜色,我有两个点,图层都显示为蓝色默认图标