如何正确清除Ember.Enumerable的内容?

时间:2013-01-04 22:14:14

标签: ajax arrays enums ember.js

我最近在看Emberjs并发现这篇有用的文章由其主要贡献者之一撰写:Advice on & Instruction in the Use Of Ember.js

它向我介绍了一个示例,该示例从服务器获取用户数据列表并在屏幕上呈现它们。我将简要解释它是如何工作的:

  1. 应用程序联系服务器以通过ajax获取用户数据列表 呼叫。
  2. 在ajax调用结束时,返回一个空的枚举 立即,后来用作控制器的属性。
  3. 一旦ajax调用完成,它就会用枚举数据填充枚举 轮流更新控制器的属性,最后触发一个 自动重新渲染。
  4. 只要不重新访问列表,这样就可以正常工作。当用户重新访问列表时,例如他/她导航到另一个状态然后返回,逻辑将再次被触发,从服务器获取数据并填充列表。但是,这次的清单并非空!因此,我们有一个重复数据列表。我想通过在ajax调用成功时清除列表的内容来解决这个问题。以下是ajax调用的代码:

    allAwesomebergs: [],
    fetch: function(){
        $.ajax({
            url: 'https://api.github.com/repos/emberjs/ember.js/contributors',
            dataType: 'jsonp',
            context: this,
            success: function(response) {
                response.data.forEach(function(awesomeberg){
                    this.allAwesomebergs.addObject(App.Awesomeberg.create(awesomeberg))
                }, this);
            }
        });
        return this.allAwesomebergs;
    },
    

    上述代码不会清除列表的内容。我尝试在成功函数的开头添加一行“allAwesomebergs = []”,但我得到的只是一个空白屏幕。我以为我可能没有正确地做到这一点,但我查看了Ember的文档,并没有看到任何关于清除Enumerable内容的信息。

    因此问题是:解决此重复加载问题的最简单方法是什么?事先清除内容似乎是最明显的,但我无法使其发挥作用。

2 个答案:

答案 0 :(得分:3)

您可以在开始添加新对象之前调用clear()。请参阅this documentation

新代码将是:

allAwesomebergs: [],
fetch: function(){
    $.ajax({
        url: 'https://api.github.com/repos/emberjs/ember.js/contributors',
        dataType: 'jsonp',
        context: this,
        success: function(response) {
            this.allAwesomebergs.clear();
            response.data.forEach(function(awesomeberg){
                this.allAwesomebergs.addObject(App.Awesomeberg.create(awesomeberg))
            }, this);
        }
    });
    return this.allAwesomebergs;
},

答案 1 :(得分:-2)

我认为你的方法还可以,但应该是:

this.allAwesomebergs = []

这就是它面前的一切。这里不需要这么清楚。