Javascript 创建一个集合,该集合是多个集合的联合(EmberJS)

Javascript 创建一个集合,该集合是多个集合的联合(EmberJS),javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我试图显示一个列表,它是列表的并集 我的模型 我有两个有很多关系的人把电影和图书馆联系起来 +---------+ hasMany +---------+ hasMany +-------+ | Library | ---------> | Storage | ---------> | Movie | +---------+ +---------+ +-------+ Javascript: App.Library = DS.

我试图显示一个列表,它是列表的并集

我的模型 我有两个有很多关系的人把电影和图书馆联系起来

+---------+  hasMany   +---------+  hasMany   +-------+
| Library | ---------> | Storage | ---------> | Movie |
+---------+            +---------+            +-------+
Javascript:

App.Library = DS.Model.extend({
    name : DS.attr(),
    storages : DS.hasMany('storage', {async:true})
});

App.Storage = DS.Model.extend({
    hostname : DS.attr(),
    login : DS.attr(),
    password : DS.attr(),
    name : DS.attr(),
    movies: DS.hasMany('movie', {async:true})
});

App.Movie = DS.Model.extend({
    name: DS.attr()
    duration : DS.attr()
});
库已加载到my AppController中:

App.ApplicationController = Ember.Controller.extend({
  data: function() {
    return this.get('store').find('library', 1);
  }.property()
});
问题 我要做的是显示我库中所有电影的列表,按名称排序。我试过类似的方法,但不起作用:

App.LibraryController = Ember.ArrayController.extend({
  needs: ['application'],
  sortProperties : [ 'name' ],
  sortAscending : true,

  model: function() {
    var storages = this.get('controllers.application.data.storages');
    if (storages) {
      return storages.mapBy('cpls').reduce(function(accum, items) {
        return accum.pushObjects(items);
      }, Ember.ArrayController.create({}));
    }
    else {
      return [];
    }
  }.property('controllers.application.data.storages.@each')
});
但这种方法有几个问题:

  • 显然,它不起作用
  • 如果添加或删除单个电影,则必须重建整个阵列,而不是仅修改一个条目
  • 属性应该依赖于
    controllers.application.data.storages.@each.movies.@each
    但EmberJS不支持在@each之后添加选择器(请参阅本章末尾的说明)
我需要一些提示,有人知道如何正确解决这个问题吗


编辑:


我找到了与我的问题相关的要点:你考虑过直接去商店查询电影吗?代码>商店.查找(应用程序.电影)。这将为您提供recordArray,当您向存储添加更多电影时,该recordArray将不断更新。这将列出所有电影,包括不在当前库中的电影。抱歉,我错过了。对不起,我帮不了你。我不确定什么是解决这个问题的好办法。我不熟悉域模型,也不确定存储在做什么,但是,是否可以将其反规范化并直接将电影添加到库中?也许存储在服务器端是有意义的,但在应用程序的上下文中可能不需要它(只是一个猜测)。我经常使用不同的模型客户端来处理较小的上下文(例如,对于一个用户、区域、非规范化、扁平化关系等),这不是最干净的方法,但显然是最有效的。这就是我最后要做的,谢谢你的投入!我认为如果/当改变结构对应用领域有意义时,改变结构是好的,但是由于框架的限制,这样做感觉是错误的。其他库有一个selectMany或Flatte方法来实现这一点。很抱歉,我无法提供更好的答案:(