2

我最近在看 Emberjs,发现这篇有用的文章是由它的主要贡献者之一写的:关于 Ember.js 使用的建议和说明

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

  1. 该应用程序通过 ajax 调用联系服务器以获取用户数据列表。
  2. 在 ajax 调用结束时,立即返回一个空的可枚举,稍后将其用作控制器的属性。
  3. 一旦 ajax 调用完成,它会用数据填充枚举,这些数据依次更新控制器的属性,最后触发自动重新渲染。

只要不重新访问该列表,它就可以正常工作。当用户重新访问列表时,假设他/她导航到另一个状态然后返回,逻辑将再次触发,从服务器获取数据并填充列表。不过,这一次的名单可不是空的!因此,我们有一个重复数据列表。我想通过在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 内容的内容。

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

4

2 回答 2

3

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

新代码将是:

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;
},
于 2013-01-04T22:23:54.837 回答
-2

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

this.allAwesomebergs = []

这一切都是关于它面前的这个。这里不需要这么清楚。

于 2013-01-04T22:50:02.283 回答