Javascript Emberjs:使用来自父级和子级的数据创建复杂操作

Javascript Emberjs:使用来自父级和子级的数据创建复杂操作,javascript,ember.js,Javascript,Ember.js,所以我有这个余烬应用程序,我正在建设,一切都顺利,直到现在。我有点困惑,不太明白我必须做什么,但我知道我想做什么。我陷入困境的地方是:我想为一个用户显示所有的录音,每个录音都会有1到2个过滤版本(以后可能会有更多)。在显示所有a用户录制的表中,我希望为每个版本呈现一个链接。目前,我们在API中通过在公共id前面添加一些内容来形成这些链接,以便进行录制 下面是一些伪代码来帮助说明我的问题: //models App.User = DS.model.extend({ first_name: DS

所以我有这个余烬应用程序,我正在建设,一切都顺利,直到现在。我有点困惑,不太明白我必须做什么,但我知道我想做什么。我陷入困境的地方是:我想为一个用户显示所有的录音,每个录音都会有1到2个过滤版本(以后可能会有更多)。在显示所有a用户录制的表中,我希望为每个版本呈现一个链接。目前,我们在API中通过在公共id前面添加一些内容来形成这些链接,以便进行录制

下面是一些伪代码来帮助说明我的问题:

//models
App.User = DS.model.extend({
  first_name: DS.attr('string'),
  last_name: DS.attr('string')
  recordings: DS.hasMany(App.Recording)
});

App.Recording = DS.model.extend({
  name: DS.attr('string'),
  filter: DS.hasMany(App.Filter)
});

App.Filter = DS.model.extend({
  name: DS.attr('string'),
  linkPrefix: DS.attr('string')
});

//router
App.Router.map( function(){
  this.resource('user', {path: '/:user_id'}, function(){});
});

//User template

<script type="text/x-handlebars" data-template-name="user">
    <table class="table">
      <thead>
        <tr>
          <th>Recording Name</th>
          <th>Filters</th>
        </tr>
      </thead>
      <tbody>
        {{#each recording in recordings}}
        <tr>
          <td>{{name}}</td>
          <td>
            {{#each filter in recording}}
              //pseudocode here: {{#view should combine linkPrefix + recording_id contentBinding="recording" (maybe??)}}{{filter.name}}{{/view}}
              //also need this link to handle the click and set it to "read" once the link has been clicked
            {{/each}}
          </td>
        </tr>
        {{/each}}
      </tbody>
    </table>
  </div>
</script>
//模型
App.User=DS.model.extend({
名字:DS.attr('string'),
姓氏:DS.attr('string')
录制:DS.hasMany(应用程序录制)
});
App.Recording=DS.model.extend({
名称:DS.attr('string'),
过滤器:DS.hasMany(App.filter)
});
App.Filter=DS.model.extend({
名称:DS.attr('string'),
linkPrefix:DS.attr('string')
});
//路由器
App.Router.map(函数(){
这个.resource('user',{path:'/:user_id'},function(){});
});
//用户模板
录音名称
过滤器
{{{#录音中的每个录音}
{{name}}
{{{#记录中的每个过滤器}
//此处的伪代码:{{{}视图应结合linkPrefix+recording_id contentBinding=“recording”(可能??}}{{filter.name}{{/view}}
//还需要此链接来处理单击,并在单击链接后将其设置为“读取”
{{/每个}}
{{/每个}}
如果不明显,我想在“过滤器”的表格单元格中显示“未过滤”和“增强”等名称。每个名字都应该链接到录音的相应版本,现在只需要在一个新标签中打开(我知道,恶心)


因此,经过一段时间的努力,我发现我不知道如何将父录制id和子链接前缀呈现到视图中;对我来说最大的问题是,我无法让视图“了解”父录制和子筛选器。Filter.name是小菜一碟,但我担心这不是“余烬方式”。我的直觉告诉我,有一种方法可以完成这一部分,甚至不用使用each循环。想法?

似乎您需要在这里添加一些属性以进行筛选。首先添加一个belongsTo关系,以便可以访问录制,然后添加一个计算属性,该属性返回给定录制和链接前缀的筛选器url

App.Filter = DS.model.extend({
  name: DS.attr('string'),
  linkPrefix: DS.attr('string'),
  recording: DS.belongsTo(App.Recording),
  link: function() {
    return this.get('linkPrefix') + this.get('recording.id')
  }.property('linkPrefix', 'recording')
});
现在,您的车把模板很简单:

        {{#each filter in recording}}
          <a {{action markFilterAsRead filter}} {{bindAttr href="filter.link"}}>{{filter.name}}</a>
        {{/each}}
{{{#记录中的每个过滤器}
{{/每个}}

up投票接近,但过滤器模型似乎不知道录制模型。我正在为recording.id获取null。这是我独自挣扎的地方,但我喜欢你的方法。我要在这里再努力一点…弄明白了。你的方法完全有效。我使用的几种方法也是如此。最后,除非将父设备的id放入子设备中,否则设备适配器不支持这些关系。该死,我在这件事上浪费了很多时间。