2013-08-06 3 views
0

나는 Phone 모델을 가지고 있습니다.ArrayController 캐싱 및 워킹

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(); 
}, 

I (dataSet 자바 스크립트 단지 일련의 구현입니다) 내 응용 프로그램의 모든 전화를 캐시 할 이것이 올바른 길을 걷는 지 확신 할 수 없음 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

Ember.Set.create();를 사용할 수 있습니다. new this.dataSet(); 대신. Ember는 자신 만의 Set 구현을 가지고 있습니다.) –

+0

감사합니다. – dangonfast

답변

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); 
}); 
+0

내 구현보다 훨씬 깨끗해 보입니다. 나는 그것을 시도 할 것이다, 고마워. – dangonfast

2

정답을 언급 할 가치가 한 가지 @mavilein하면 App.Phone.find()을하고 레코드를 페치 후 다음 App.Phone 같은 모델이있는 경우, 귀하의 Store 당신이 App.Phone.all()이 의지와 상담 할 수 이미 캐시를 가지고 있다는 것입니다 게다가 다른 요청을하지 않고 Store에서 사용 가능한 레코드를 제공합니다.

희망이 있습니다.

+0

의미가 있습니다. 감사합니다. – dangonfast

+0

전화가 이미 요청되었는지 여부를 모르면 어떻게해야합니까? 'App.Phone.all()'에 접근 할 수 있습니까? App.Phone.find()가 자동으로 실행됩니까? – dangonfast

+0

아니요'.all()'은 이미 가져온 레코드 만 검색합니다 (https://github.com/emberjs/data/blob/master/packages/ember-data/lib/system/store.js 참조). # L848 – intuitivepixel