フォームに日付ピッカーを統合したいと考えています。そこで、次のようなカスタム DateTimePickerView を作成しました。
App.DateTimePickerView = Em.View.extend
templateName: 'datetimepicker'
didInsertElement: ->
self = this
onChangeDate = (ev) ->
self.set "value", moment.utc(ev.date).format("dd/MM/yyyy hh:mm")
@$('.datetimepicker').datetimepicker(language: 'fr', format: 'dd/mm/yyyy hh:ii').on "changeDate", onChangeDate
テンプレートは次のとおりです。
<script type="text/x-handlebars" data-template-name="datetimepicker" >
<input type="text" class="datetimepicker" readonly>
</script>
私のフォームでは、このコンポーネントをモデルの属性にバインドしたいと考えています (RestAdapter を使用しています)。
<script type="text/x-handlebars" id="post/_edit">
<p>{{view Ember.TextField valueBinding='title'}}</p>
<p>{{view App.DateTimePickerView valueBinding='date'}}</p>
</script>
外観はすべて正常に機能します。DateTimePicker は適切に表示され、値は入力内に設定されます。しかし、効果的なバインディングには問題があります。フォームを送信すると、投稿パラメーター「日付」(属性に対応) が null になります。
生成された html コードの中を見ると、次のように表示されます。
<p>
<input id="ember393" class="ember-view ember-text-field" type="text" value="Event 1">
</p>
<div id="ember403" class="ember-view">
<input type="text" class="datetimepicker" readonly="">
</div>
私はグローバルな ember 構造の専門家ではありませんが、バインドには id 要素が重要だと思います。その場合、私のコンポーネントでは、値を含む入力ではなく、コンポーネントのコンテナーに ember id が配置されます。だから私は問題がここにあると思います。
では、それを機能させる正しい方法は何でしょうか?
ここで動作する jsfiddle を作成しました。title フィールドの変更は考慮されていますが、DateTimePickerView コンポーネントの変更は考慮されていないことがわかります。