Skip to content
This repository was archived by the owner on Dec 26, 2019. It is now read-only.

Commit 0a61d9b

Browse files
committed
Fix two-way value binding
Fixes #8
1 parent 212b47c commit 0a61d9b

File tree

1 file changed

+38
-9
lines changed

1 file changed

+38
-9
lines changed

addon/components/datepicker-support.js

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ export default Ember.Mixin.create({
66
setupBootstrapDatepicker: function() {
77
var self = this,
88
element = this.$(),
9-
value = this.get('value');
9+
value = this.get('value'),
10+
dates = [];
1011

1112
element.
1213
datepicker({
@@ -39,19 +40,18 @@ export default Ember.Mixin.create({
3940
if (this.get('multidate')) {
4041
// split datesIsoString by multidate separator
4142
var multidateSeparator = this.get('multidateSeparator') || ',';
42-
var dateIsoStrings = value.split( multidateSeparator );
43+
var isoDates = value.split(multidateSeparator);
44+
4345
// generate array of date objecs
44-
var dateObjects = dateIsoStrings.map( function(dateIsoString) {
45-
return new Date(dateIsoString);
46+
dates = isoDates.map(function(date) {
47+
return self._resetTime(new Date(date));
4648
});
47-
// set datepickers internal date
48-
element.datepicker('setDates', dateObjects);
49-
// update datepicker view
50-
element.datepicker('update');
5149
}
5250
else {
53-
element.datepicker('update', new Date(value));
51+
dates = [self._resetTime(new Date(value))];
5452
}
53+
element.datepicker.
54+
apply(element, Array.prototype.concat.call(['update'], dates));
5555
}
5656
}.on('didInsertElement'),
5757

@@ -75,5 +75,34 @@ export default Ember.Mixin.create({
7575
}
7676

7777
this.set('value', isoDate);
78+
},
79+
80+
didChangeValue: function() {
81+
var self = this,
82+
element = this.$(),
83+
value = this.get('value'),
84+
dates = [];
85+
86+
if (Ember.isArray(value)) {
87+
dates = value.map(function(date) {
88+
return self._resetTime(new Date(date));
89+
});
90+
} else {
91+
dates = [self._resetTime(new Date(value))];
92+
}
93+
94+
element.datepicker.
95+
apply(element, Array.prototype.concat.call(['update'], dates));
96+
}.observes('value'),
97+
98+
// HACK: Have to reset time to 00:00:00 because of the bug in
99+
// bootstrap-datepicker
100+
// Issue: http://git.io/qH7Hlg
101+
_resetTime: function(date) {
102+
date.setHours(0);
103+
date.setMinutes(0);
104+
date.setSeconds(0);
105+
106+
return date;
78107
}
79108
});

0 commit comments

Comments
 (0)