我最近在看Emberjs,发现这由它的主要贡献者之一写有用的文章:Advice on & Instruction in the Use Of Ember.js如何正确清除Ember.Enumerable的内容?
它走到我通过从服务器获取用户数据的列表和使它们在屏幕上的例子。我会简单介绍一下它的工作原理:
- 该应用程序与服务器联系以获取虽然AJAX调用 用户数据的列表。
- 在ajax调用结束时,立即返回一个空的枚举值 ,稍后将其用作控制器的属性。
- 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内容的任何内容。
因此,问题是:什么是解决这个重复加载问题的最简单方法?清理手中的内容似乎是最明显的,但我无法使其工作。
我认为这不会工作,因为allAwesomebergs是一个普通的iavascript数组。 – mavilein
我相信烬自动将它的一些附加功能应用到Array类。 – CraigTeegarden
谢谢你的支持!默认情况下,@mavilein是可选的,它将原生javascript对象封装到它们的ember版本中。通过一切手段,我尝试了这一点,它的工作。只要我与我曾经使用过的同一个数组一起工作,并清除那个相同的数组不会弄乱绑定。 –