【问题标题】:EmberJS sort Array Controller of ObjectsEmberJS 对对象的数组控制器进行排序
【发布时间】:2012-02-20 17:02:14
【问题描述】:

试图弄清楚这个概念。如果您在排序之前和之后 console.log this.get("content") ,一切似乎都正常,但是当它显示在屏幕上时,它会变得很时髦。我认为问题在于把手。当它“排序”时,它会添加重复的第四条记录并将其粘贴在顶部。您可以在此处查看实际问题:

http://jsfiddle.net/skinneejoe/Qpkz5/78/(点击“按年龄排序”文本几次以恢复记录,您会看到问题)

我做错了什么,有没有更好的方法,或者这是一个错误?如果是错误,有没有好的解决方法?

这是完整的代码:

index.html

    <script type="text/x-handlebars">
    {{#view App.SortView}}Sort by Age{{/view}}<br/>

    {{#each App.userController}}
        {{#view App.RecordView contentBinding="this"}}
            {{content.name}} - {{content.age}}
        {{/view}}
    {{/each}}
    </script>

app.js

window.App = Ember.Application.create();

App.userController = Ember.ArrayController.create({
    content: [
        Ember.Object.create({ name:"Jeff", age:24 }),
        Ember.Object.create({ name:"Mark", age:32 }),
        Ember.Object.create({ name:"Jim", age:12 })
    ],
    sort:"desc",
    sortContent:function() {

        if (this.get("sort") == "desc") {
            this.set("sort", "asc");
        } else {
            this.set("sort","desc")
        }

        if (this.get("sort") == "asc") {
            var sortedContent = this.get("content").sort( function(a,b){
                return a.get("age") - b.get("age");
            })
        } else {
            var sortedContent = this.get("content").sort( function(a,b){
                return b.get("age") - a.get("age");
            })
        }

        this.set("content", []);
        this.set("content",sortedContent)
    }
})

App.RecordView = Ember.View.extend({})

App.SortView = Ember.View.extend({
    click: function() {
        App.userController.sortContent("poId")
    }
})

【问题讨论】:

  • 那么问题是什么?当我点击排序视图时,我没有看到任何错误。
  • 当它“排序”时,它会添加一个重复的第四条记录并将其粘贴在顶部。对不起,我应该一开始就这么说。我将它添加到我的第一篇文章中。
  • 您运行的是哪个浏览器和版本?我在 OSX 上的 Chrome 17.0.963.56 上,我没有看到这第四条记录。

标签: arrays sorting ember.js handlebars.js


【解决方案1】:

我没有在 OS X 上的 Safari、Chrome 或 Firefox 中看到这个错误,所以我认为这是一个 IE 问题。

听起来很像 this reported Ember bug,它是在 11 天前修复的。尝试升级到ember-latest 看看是否能解决问题。

【讨论】:

  • 这解决了它。我应该在另一个浏览器中尝试。感谢您的帮助!
猜你喜欢
  • 2012-02-20
  • 2011-08-18
  • 2020-05-18
  • 1970-01-01
相关资源
最近更新 更多