缓存和遍历ArrayController

时间:2013-08-06 13:39:55

标签: ember.js ember-data

我有一个Phone模型。我想在我的应用程序上缓存所有手机:

cachePhones : function () {
    this.set('phones', this.Phone.find());
},

获取我有可用手机的国家/地区:

getCountries : function () {
    var phones = this.get('phones.content');
    var countries = new this.dataSet(), country;
    console.log('phones=%o', phones.length);
    for (var index = 0, length = phones.length; index < length; index++) {
        country = phones[index].record.get('country');
        console.log('Adding %o', country);
        countries.add(country, true);
    }
    console.log('countries=%o', countries.keys());
    return countries.keys();
},

dataSet只是javascript中的一个集合实现)

我不确定这是走ArrayController

的正确方法
  • 我真的需要访问content吗?
  • 我真的需要访问record吗?

这感觉就像是在我的方式在黑暗内部乱砍。我在此之前尝试过:

var phones = this.get('phones');
var countries = new this.dataSet(), country;
for (var index = 0, length = phones.length; index < length; index++) {
    country = phones[index].country;
    countries.add(country, true);
}

但它根本不起作用。步行ArrayController的规范方法是什么?

2 个答案:

答案 0 :(得分:2)

你尝试过这样的事吗?通常情况下,你应该总是使用Ember为其系列提供的功能方法。

var phones = this.get('phones');
var countries = new this.dataSet(), country;
phones.forEach(function(phone, index){
  country = phone.get("country");
  countries.add(country, true);
});

答案 1 :(得分:2)

除了@mavilein正确答案之外,值得一提的是,如果你有App.Phone之类的模型,那么在你App.Phone.find()之后获取记录时,你的Store已经有了一个缓存您可以咨询App.Phone.all(),这不会再提出请求,但会为您提供Store中提供的记录。

希望它有所帮助。