Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EmberJS:在获取模型后获取模型的单个属性_Javascript_Ember.js_Datastore - Fatal编程技术网

Javascript EmberJS:在获取模型后获取模型的单个属性

Javascript EmberJS:在获取模型后获取模型的单个属性,javascript,ember.js,datastore,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({ displayNam

我有两个型号,一个
用户
,有许多
消息

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')    
});
目前,我必须在执行用户搜索时加载整个模型,包括与用户关联的所有消息

我想做的是:

  • 检索用户
  • 检索用户的消息(当用户被选中时)
  • 我找不到一个简单的方法在余烬做到这一点。我最好的猜测是在路线中调用
    查找
    ,可能是:

    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/消息的东西


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

    我认为
    {async:true}
    是您要查找的。有关它是什么以及如何使用它的一些讨论,请参阅

    您可能希望按照以下方式设置模型:

    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 } )    
    });
    
    然后,当您的把手模板请求
    {{myUser.messages}}
    (或
    {myUser.messages.someProperty}}
    时,成员数据将查看
    用户
    模型,并注意消息id(例如,5、10和12)。然后,它将在本地数据存储中查找消息5、10和12。如果有,它将显示它们。如果它们不存在,它将使用您为
    消息定义的适配器(或者如果没有定义适配器,则使用默认的
    RESTAdapter
    )使用HTTP GET获取这些消息


    我相信它会对每个id发出一个请求(而不是对所有id发出一个请求),但这一点我不是百分之百确定。

    谢谢@Josh,非常有用。批量处理这些请求并在这些请求被触发时进行自定义是很好的,但我认为我们的思路是正确的。是的,我听到了。我想你最好的办法是按照我的回答进行设置,然后使用Chrome开发工具监控网络流量,看看会发生什么实际上是的。我只是不确定,在我上面的例子中,它会执行3个请求,还是1个批处理请求。很高兴它有帮助!