gpt4 book ai didi

javascript - 在没有 ArrayController 的情况下对 hasMany 关系进行排序

转载 作者:行者123 更新时间:2023-11-28 01:13:49 24 4
gpt4 key购买 nike

当你没有可以依赖的数组 Controller 时,我试图找出“Ember 方式”来进行排序。

我创建了一个 jsbin 来解释这种情况, 尽管我无法让它在 jsbin 上工作(尽管它在我的项目中工作): http://emberjs.jsbin.com/mused/2/edit?html,js

修复 -- 感谢 kingpin,这个 jsbin 正在运行: http://emberjs.jsbin.com/quyawitu/5/edit

基本上,假设您有两个模型:“House”和“Window”

房子有很多 window 。一扇 window 属于一座房子。

现在假设您所在的模板如下所示:

<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each house in model}}
<li>
<div class="name">
House name: {{house.name}}
</div>
<div>
First Window: {{house.firstWindow}}
</div>
</li>
{{/each}}
</ul>
</script>

在此模板中,我不仅仅对链接到窗口的关联感兴趣 - 相反,我正在寻找第一个窗口(具体来说,第一个窗口,按createdAt排序)。

使用 this question 的答案,我使用带有可排序混合的 ArrayProxy 在我的 House 模型上创建一个计算属性来获取此引用。我想知道是否有更惯用的“Ember 方式”来做到这一点。

最佳答案

升级ember并使用内置的sortBy

在您的特定情况下,由于您已切换到固定适配器,这些项目是异步的,因此我必须更改其中一些内容才能使其在您的 jsbin 中工作

  firstWindow: function(){
return this.get('windowsByCreatedAt.firstObject');
}.property('windowsByCreatedAt.firstObject'),

windowsByCreatedAt: function() {
var arr = [];
this.get('windows').then(function(windows){
arr.pushObjects(windows.sortBy('createdAt'));
});
return arr;
}.property('windows.@each.createdAt')
});

http://emberjs.jsbin.com/quyawitu/3/edit

或者,如果您想查看 isLoaded 并重新填充计算属性,它看起来会干净得多:

  windowsByCreatedAt: function() {
return this.get('windows').sortBy('createdAt');
}.property('windows.@each.createdAt', 'windows.isLoaded')

http://emberjs.jsbin.com/quyawitu/6/edit

关于javascript - 在没有 ArrayController 的情况下对 hasMany 关系进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com