我最近在看Emberjs并发现这篇有用的文章由其主要贡献者之一撰写:Advice on & Instruction in the Use Of Ember.js
它向我介绍了一个示例,该示例从服务器获取用户数据列表并在屏幕上呈现它们。我将简要解释它是如何工作的:
只要不重新访问列表,这样就可以正常工作。当用户重新访问列表时,例如他/她导航到另一个状态然后返回,逻辑将再次被触发,从服务器获取数据并填充列表。但是,这次的清单并非空!因此,我们有一个重复数据列表。我想通过在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内容的信息。
因此问题是:解决此重复加载问题的最简单方法是什么?事先清除内容似乎是最明显的,但我无法使其发挥作用。
答案 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 = []
这就是它面前的一切。这里不需要这么清楚。