0

我有一个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吗?

这感觉就像是在 ember 内部进行黑客攻击。在此之前我已经尝试过:

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什么?

4

2 回答 2

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);
});
于 2013-08-06T14:19:13.553 回答
2

除了@mavilein 正确答案之外,值得一提的是,如果您有一个模型,App.Phone那么在您完成App.Phone.find()并获取记录之后,您Store已经有一个缓存,您可以参考App.Phone.all()它不会发出另一个请求,而是为您提供可用的记录Store. _

希望能帮助到你。

于 2013-08-06T14:25:44.660 回答