2014-09-10 6 views
2

session.user에 세션에로드 된 사용자 개체가 있습니다. 사용자에게 많은 역할을 할당 할 수 있습니다. 다음은 모델에서 보이는 모습입니다.어떻게 hasMany 관계를 필터링 할 수 있습니까?

App.User = DS.Model.extend({ 
    roles  : DS.hasMany('role'), 
    ... 
} 

역할이 포함 된 레코드로 사용자에게로드됩니다. 사용자가 ember-data store에 성공적으로로드되고 사용자와 역할 간의 관계가 모두 양호 함을 확인할 수 있습니다.

내가 할 수 있기를 원하는 것은 역할 속성에 따라 사용자의 역할 중 하나를 얻는 것입니다. 나는 시도했다

this.get('session.user.roles').then(function (roles) { 
    return roles.filterBy('propertyName', 'propertyValue'); 
}); 

그러나 나는 get 메소드가 store.find() 메소드와 같은 약속을 리턴한다고 생각하지 않는다. 역할을 필터링하기 위해 어떤 방법이 제공됩니까?

답변

3

당신이하고있는 방식은 약속을 지키면 사용할 수 있습니다. 내가 깰 수 있는지 알아 보자.

var rolesPromise = this.get('session.user.roles'); 

var filteredRolesPromise = rolesPromise.then(function (roles) { 
    return roles.filterBy('propertyName', 'propertyValue'); 
}); 

filteredRolesPromise.then(function(filteredRoles){ 
    // available here 
    console.log(filteredRoles.get('length')); 
}); 

여기에 필터링 된 역할이 사용할 수 위치를 표시의 짧은 방법 :

여기에 필터링 된 역할이 사용할 수 위치를 표시의 긴 방법

this.get('session.user.roles').then(function (roles) { 
    var filteredRoles = roles.filterBy('propertyName', 'propertyValue'); 
    // available here 
    console.log(filteredRoles.get('length')); 
}); 

또는

var foo = this.get('session.user.roles').then(function (roles) { 
    return roles.filterBy('propertyName', 'propertyValue'); 
}).then(function(filteredRoles){ 
    // available here 
    console.log(filteredRoles.get('length')); 
}); 

약속에 속성을 반환하면 다음 날짜에 사용할 수 있습니다. 약속, 그것을 변수에 할당하지 않습니다 (오른쪽의 경우 foo).

이 여기를

는 약속에 도움이 : 역할이 안전하게 동기 방식을 사용할 수 없을거야 비동기 속성이기 때문에

https://www.youtube.com/watch?v=8WXgm4_V85E은 기본적으로 말인지.

+0

오! 이것은 귀하의 프레 젠 테이션입니다. 근본적인. 사용자 이름에 얼굴을 표시하는 것이 좋습니다. 나는 이것을 확실히 볼 것이다. 것은 역할이 비동기 관계가 아니라는 것입니다. 그것들은'DS.hasMany ('role')'로 정의되어 있으며'DS.EmbeddedRecordsMixin'을 사용하여 임베디드를 직렬화합니다. 내가'this.get ('session.user.roles')'을했을 때, 나는 약속을 되찾지 못했지만, 역할 배열 객체라고 생각한다. – ToddSmithSalter

+0

'this.get ('session.user.roles')'를 실행하면 DS.ManyArray 객체가 반환되는 것을 확인할 수 있습니다. DS.ManyArray는 Ember.ArrayProxy를 확장하는 DS.RecordsArray를 확장합니다. 필터 메소드에 액세스 할 수 없습니까? 대신, 나는 항상'Uncaught TypeError : undefined'의 'filter'속성을 읽을 수 없습니다. – ToddSmithSalter

+0

해당 링크를 제공해 주셔서 감사합니다. 나는 약속의 4 층 케이크로 역할을 얻고 걸러 낼 수 있었다. 지금 내가 겪고있는 문제는 메소드의 약속 값을 반환하는 것입니다. 범위 변수에 설정하려고 시도했지만 막대기처럼 보이지 않습니다. – ToddSmithSalter

관련 문제