我有一个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
的规范方法是什么?
答案 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
中提供的记录。
希望它有所帮助。