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