我想在表单中集成一个日期选择器。所以我创建了一个这样的自定义 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 显示良好,值在输入中设置。但是有效绑定有一个问题:当我发送表单时,post参数“日期”(对应于属性)为空。
当我查看生成的 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 ;我们可以看到标题字段中的修改被考虑在内,但没有考虑到 DateTimePickerView 组件中的修改。