2014-06-06 2 views
1

의존 할 배열 컨트롤러가 없을 때 정렬을 수행하는 "엠버 방식"을 파악하려고합니다. 덕분에 두목에 - http://emberjs.jsbin.com/mused/2/edit?html,jsArrayController없이 hasMany 관계 정렬

FIX : 나는 (내 프로젝트에서 작동하지만)는 jsbin 작업을 얻을 수 없습니다 불구하고

나는, 를 상황을 설명하기 위해 jsbin을 생성 이 jsbin가 작동 : http://emberjs.jsbin.com/quyawitu/5/edit

을 기본적으로 두 개의 모델을 가지고 말 : "집"과 "창"

하우스 hasMany의 창을. 창은 집에 속합니다. 난 그냥 창문에 연결에 연결에 관심이없는 나는이 템플릿에서

<script type="text/x-handlebars" data-template-name="index"> 
    <ul> 
    {{#each house in model}} 
     <li> 
     <div class="name"> 
      House name: {{house.name}} 
     </div> 
     <div> 
      First Window: {{house.firstWindow}} 
     </div> 
     </li> 
    {{/each}} 
    </ul> 
</script> 

- 대신, 내가 첫 번째 창을 찾고 있어요 :

은 이제 다음과 같습니다 템플릿에있는 말 (특히, 첫 번째 창은 createdAt에 의해 정렬 됨).

this question에 대한 대답을 사용하여 Sortable mixin과 함께 ArrayProxy를 사용하여이 참조를 얻기 위해 집 모델에서 계산 된 속성을 만들었습니다. 이 작업을 수행하는 데 더욱 관용적 인 "Ember way"가 있는지 궁금합니다.

답변

1

업그레이드 엠버하고 고정 어댑터로 전환 한 이후, 당신의 특별한 경우

sortBy 내장 사용, 해당 항목은 비동기, 그래서 나는 그것이 작동하도록 것들 몇 가지를 변경했다 당신의 jsbin에서

firstWindow: function(){ 
    return this.get('windowsByCreatedAt.firstObject'); 
    }.property('windowsByCreatedAt.firstObject'), 

    windowsByCreatedAt: function() { 
    var arr = []; 
    this.get('windows').then(function(windows){ 
     arr.pushObjects(windows.sortBy('createdAt')); 
    }); 
    return arr; 
    }.property('[email protected]') 
}); 

http://emberjs.jsbin.com/quyawitu/3/edit

또는 당신은 많은 청소기를 보이는 계산의 property isLoaded을보고 다시 채 웁니다하려는 경우 :

나는 그 고정 주셔서 감사 제 생각 엔

http://emberjs.jsbin.com/quyawitu/6/edit

+0

windowsByCreatedAt: function() { return this.get('windows').sortBy('createdAt'); }.property('[email protected]', 'windows.isLoaded') 
은 내가 jsbin 템플릿을 사용하고이 날짜에서 더 많은되어 있어야합니다! 'windowsByCreatedAt'기능이 여전히 나에게 다소 어수선하다고 느낍니다. 배열 프록시에서 정렬 가능한 믹스 인을 사용하는 것은 너무 다르지 않습니다. 여기에 jsbin이 있습니다 : http://emberjs.jsbin.com/quyawitu/5/edit. 나는 아마 거기에있을 때이 문제에 완벽하고 예쁜 해결책이 있어야한다고 가정하고 있습니다. – myowz

+1

그것은 특정 상황에서 비동기 적이어야 할 필요가있는 사실 때문에 대부분 clunky입니다. 비동기 업데이트를 기다리는 게으른 방법을 사용합니다. – Kingpin2k

+1

그리고 제가 게으름이라고 부르는 유일한 이유는 약속을 사용하기를 좋아하기 때문입니다.하지만 여전히 유효하며이 상황을 크래시하지 않습니다 (firstWindow는 잠시 정의되지 않지만 템플릿에는 아무런 문제가 없습니다). – Kingpin2k

관련 문제