1

私のバックエンドにモデルがDealerありCar、両方がManyToManyEmberでもリレーションで接続されているとしましょう。バックエンドでリレーションを手動で作成し、それを Ember ビューで表示しながら、それを簡単に表示できDealer Xます。また、モデルを表示するときは、モデルを含むすべての人を表示できます。Car 1Car 2Car 3CarDealersCar

ここで、編集の可能性を追加する必要があります。たとえば、編集中に、オファーにこれを持っている人Carを選択したいということです。(そのような編集の可能性は、関係の片側だけに必要です-両方ではないので、追加できることを受け入れることができますが、反対方向にそれを行う必要はありません(それがまさに私の背景が機能している方法です)DealersCarDealersCars

そこで、andApp.CarControllerのようなアクションを作成し、関係を保存するバックエンドに適切なクエリを送信します。addDealerToCardeleteDealerFromCar

Dealer問題は、 ieを選択できるフィールドを作成するにはどうすればよいかということです。選択ボックスまたは他のドロップダウンを使用して、バックエンドに送信するアクションを呼び出しますか?

4

1 に答える 1

2

私は最近、チェックボックスを使用してフォームに多対多の関係を追加することを実装しました。これは私の使用例に適していました。なぜなら、特定の車に対して選択できるディーラーシップが 2 つから 6 つしかないからです。ただし、それ以上の場合、これはおそらく適切ではありません。

これは、私が使用したコードをあなたのシナリオに翻訳したものです。この質問のコードからインスピレーションを得ました: Ember、ember-data、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());
  }

});
于 2013-07-27T03:38:22.380 に答える