2013-07-26 4 views
1

내 백엔드에서 모델 DealerCar을 가지고 있다고 가정 해 봅시다. 두 모델 모두 Ember에 ManyToMany 관계가 연결되어 있습니다. 백엔드에서 릴레이션을 수동으로 생성 할 수 있고 Ember 뷰를 사용하여 표시 할 때 그의 제안에 Dealer XCar 1, Car 2Car 3 인 것을 쉽게 표시 할 수 있습니다. 또한 Car을 표시 할 때 Car 모델을 포함하는 모든 Dealers을 표시 할 수 있습니다.ember.js ManyToMany 관계를 어떻게 처리할까요?

은 지금은 내가 예를 들어 나는 그의 제안이 Car이있는 Dealers을 선택하고자하는 Car을 편집하고있을 때 의미, 약간의 편집 가능성을 추가해야합니다. (나는 관계의 한쪽 편에서만 편집 할 수있는 가능성이 필요합니다. 둘 다가 아니라, DealersCars에 추가 할 수는 있지만 받아 들일 수는 있지만 그 반대 방향으로 할 필요는 없습니다.)

그래서 App.CarController에 나는 addDealerToCardeleteDealerFromCar 같은 조치를 생성하고이 관계를 저장 백엔드에 적절한 조회를 전송

질문이다. 나는 나를 Dealer을 선택할 수있는 몇 가지 필드를 만들 수있는 방법 즉, 선택 상자 또는 다른 드롭 다운을 사용하고 백엔드로 보낼 작업을 호출하십시오.

답변

2

나는 최근에 체크 박스를 사용하여 폼에 many-to-many 관계를 추가하는 것을 구현했다. 나는 단지 2 대 6의 딜러가 특정 카를 위해 선택할 수 있기 때문에 나의 유스 케이스에 적합했다. 당신이 그 이상을 가지고 있다면 이것은 아마도 적합하지 않을 것입니다.

다음은 내가 사용했던 코드입니다. Many to Many Relationships with Ember, ember-data and Rails

보기 :

App.CarEditView = Ember.View.extend({ 

    dealerCheckbox: Ember.Checkbox.extend({ 

    init: function(){ 
     this._super(); 
     var self = this; 
     // start off with the checkboxes checked for any dealer that 
     // has this car already 
     this.get('car.dealers').forEach(function(dealer){ 
     if(dealer.get('id') == self.get('dealer.id')){ 
      self.set('checked', true); 
     } 
     }); 

    }, 

    checkedObserver: (function(){ 
     var car = this.get('car'); 
     if(this.get('checked')) 
     car.addDealerToCar(this.get('dealer')); 
     else 
     car.deleteDealerFromCar(this.get('dealer')); 
    }).observes('checked') 

    }) 

}); 

템플릿 (이 차를 편집 할 수있는 형태의 일부가 될 것입니다) :

<div class="control-group"> 
    <label class="control-label">Required Signatures</label> 

    <div class="controls"> 
    {{#each dealer in controller.allDealers}} 
     <label class="checkbox"> 

     {{view view.dealerCheckbox 
      carBinding="controller.content" 
      dealerBinding="dealer" 
     }} 
     {{dealer.title}} 

     </label> 
    {{/each}} 
    </div> 
</div> 

그리고 당신이 필요 나는이 질문의 코드에서 영감을했다 위와 같은 코드를 추가하여 모든 딜러 목록에 액세스 할 수 있도록하십시오.

App.CarEditRoute = Ember.ObjectController.extend({ 

    setupController: function(controller, model) { 
    this._super(controller, model); 
    controller.set('allDealers', App.Dealer.find()); 
    } 

}); 
관련 문제