2013-10-14 1 views
0

항목의 정렬 가능한 목록을 만들려고합니다. 이 순간 jQuery sortable이 사용하고 있습니다. Ember보기를 사용하여 목록을 만듭니다. 아이템이 떨어지면 Ember 모델이 새로운 주문으로 업데이트되기를 바랍니다. 나중 단계에서 이것을 서버에 다시 저장하려고합니다.jQuery 이벤트 핸들러 클로저에서 Ember.js 모델 사용

아래 코드에서 jQuery 코드를 뷰 요소에 연결 한 방법을 확인할 수 있습니다. 끌기 자체가 완벽하게 작동하고 중지 기능이 호출됩니다.

Scrum.Sortable = Ember.View.extend({ 
tagName : 'div', 
didInsertElement: function(){ 
    this.$().sortable({ 
     placeholder: "ui-state-highlight", 
     stop:function(){ 
      var order = 1; 
      $('div.pb-item').children().each(function(index){ 
       $(this).find('.order').each(function(){ 
        // 
        // Access and save the model here 
        // 
        $(this).html(order++); 
       }); 
      }); 
     } 
    }); 

} 
}); 

뷰 HTML을 수동으로 업데이트 할 수도 있습니다. 이것이 제가 모델에 저장하고 싶은 것입니다. 불행히도 모델에 액세스 할 수없는 것 같습니다.

이렇게하는 방법에 대한 아이디어는 매우 높이 평가됩니다.

감사합니다.

+0

JSbin을 제공 할 수 있습니까? – Edu

+0

것 같습니다. 모든 라이브러리를 사용할 수있는 것은 아니며 다른 위치에서로드하는 데 문제가있는 것 같습니다. – rbevers

+0

이 페이지에는 JSBin과 JSFidle에서 ember에 대한 시작점이 있습니다. 답장을 보내 주셔서 감사합니다. – Edu

답변

2

변수가 클로저에 표시되도록 함수 외부에 컨트롤러에 대한 참조를 저장하면됩니다. 컨트롤러는 일반적으로 뷰의 전체 수명 기간 동안 동일하게 유지하기 때문에 그런 다음 등

didInsertElement: function() { 
    controller = this.get('controller') 
    ... 
    $(this).find('.order').each(function(){ 
     // Here you have access to the controller variable. 
    }); 
    ... 
} 

따라서 컨트롤러와 모델에 대한 접근을해야합니다,이 안전하고에 대한 참조를 저장하는 것보다 낫다 모델이 변경 될 수 있으므로 모델 자체.

1

컨트롤러 및 컨트롤러에서 모델에 액세스 할 수 있습니다.

this.get('controller').get('model') 또는 모델에 해당하는 컨텍스트를보기에 전달할 수도 있습니다. {{View Scrum.Sortable context = this}}

+0

감사합니다. 클로저 내부는 다른 문맥입니다. 이. 거기 엔 존재하지 않아. 그래서 나는 클로저로부터 Ember 어플리케이션 컨텍스트에 접근하거나 정렬을 처리하는 다른 방법을 찾을 방법이 필요하다. – rbevers