javascript - Ember JS : Fetch a Single Attribute of a Model After the Model is Fetched

标签 javascript ember.js datastore

我有两个模型,一个带有许多消息用户:

App.Router.map(function() {    
  this.resource('user', { path: ':user_id' }, function () {
    this.route('profile', { path: 'profile' });
    this.resource('messages');
  });    
});

App.User = DS.Model.extend({    
  displayName: DS.attr('string'),
  email: DS.attr('string'),
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  location: DS.attr('string'),
  messages: DS.hasMany('message')    
});

App.Message = DS.Model.extend({    
  user: DS.belongsTo('user'),
  createdAt: DS.attr('date'),
  updatedAt: DS.attr('date'),
  fullText: DS.attr('string'),
  subject: DS.attr('string'),
  recipients: DS.attr('string')    
});

目前,当我搜索用户时,我必须加载整个模型,包括与用户关联的所有消息。

我想做的是:

  1. 检索用户
  2. 检索用户的消息(当选择用户时)

我在 Ember 中找不到简单的方法来做到这一点。我最好的猜测是在 route 调用 find ,可能:

App.UserRoute = Ember.Route.extend({    
  model: function (params) {
    var user = this.store.find('user', params.user_id);
    this.store.find('message', { user: 3 });
    return user;
  }
}

但这会生成 URL /messages?user_id=3。我想要的是类似 /users/3/messages 的内容。

如何查询与用户关联的消息?

最佳答案

我认为 { async: true } 就是您正在寻找的。请参阅http://discuss.emberjs.com/t/what-is-an-async-relationship-async-true-vs-async-false/4107关于它是什么以及如何使用它的一些讨论。

您可能希望像这样设置模型:

App.User = DS.Model.extend({    
  displayName: DS.attr('string'),
  email: DS.attr('string'),
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  location: DS.attr('string'),
  messages: DS.hasMany('message', { async: true } )    
});

然后,当您的 Handlebars 模板请求 {{myUser.messages}} (或 {{myUser.messages.someProperty}})时,Ember 数据将查看User 模型,并注意消息 ID(例如 5、10 和 12)。然后它将在本地数据存储中查找消息 5、10 和 12。如果有,则它将显示它们。如果它们不存在,它将使用您为 Message 定义的适配器(或者如果没有定义适配器,则使用默认的 RESTAdapter)来获取这些使用 HTTP GET。

我相信它会对每个 ID 发出一个请求(而不是对所有 ID 发出一个请求),但我对此并不能 100% 确定。

关于javascript - Ember JS : Fetch a Single Attribute of a Model After the Model is Fetched,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222720/

相关文章:

javascript - 列表框的双击事件

javascript - 有没有更有效的方法从 Javascript 中的对象填充表?

javascript - METEOR 帐户 UI 登录按钮未显示在移动应用程序包装中

javascript - 在 fullpage.js 上获取当前幻灯片

jquery-ui - Ember.js + jQuery UI 可拖动克隆

javascript - 在 application.create() 之外创建时将数据加载到 ember 路由器的根路由中

database - Prolog 中数据管理的最佳实践

javascript - 在 Ember.js 中返回数据之前处理数据

java - 更改应用程序引擎开发的实体类问题

javascript - 想用正则表达式去除字符串中的一部分