Knockoutjs的日期时间字段更新不会刷新模型视图
knockoutjs date time field updating doesn't refresh model view
我有模型映射主对象从JS
function editor(model)
{
var self = this;
//....
// other simple objects
//....
self.bundleModel = ko.mapping.fromJS(model);
}
另外,我有一些JS代码更新日期-时间字段,
viewModel.bundleModel.fromTime(timeFromField.get_selectedDate())
但是我看到我的数据在这种情况下没有在UI上更新。
<div class="days">
<!-- ko foreach: {data: editor.bundleModel.days, as: 'day'} -->
<div class="day_div" data-bind="value: day, html: viewModel.editor.dayCaption(day), css: viewModel.editor.dayActivator(day),click: viewModel.editor.selectDay">
</div>
<!-- /ko -->
</div>
如何解决?
在发现似乎没有很多很棒的解决方案来支持KnockoutJS的日期/时间输入后,我发布了这个要点…https://gist.github.com/groovenectar/814703d1bc260859b8600e9d8a917b4d
// Usage: <datetime params="id: 'any-unique-id', datetimeObservable: observableDateTimeObjectFromParentViewModel, default: defaultDateObject, min: new Date(), max: maxDateObject"></datetime>
ko.components.register('datetime', {
viewModel: function(params) {
this.dateid = params.id + '-date';
this.timeid = params.id + '-time';
this.date = '';
this.time = '';
this.datetimeObservable = params.datetimeObservable;
this.datetimeObservable.subscribe(function(datetime) {
if (datetime === null) {
return;
}
this.date = datetime.getFullYear() + '-' + ('00' + (datetime.getMonth() + 1)).slice(-2) + '-' + ('00' + datetime.getDate()).slice(-2)
this.time = ('00' + datetime.getHours()).slice(-2) + ':' + ('00' + datetime.getMinutes()).slice(-2);
dateElm = document.getElementById(this.dateid);
timeElm = document.getElementById(this.timeid);
if (
dateElm && timeElm &&
this.date.match(/'d{4}-'d{2}-'d{2}/) && this.time.match(/'d{2}:'d{2}/)
) {
document.getElementById(this.dateid).value = this.date;
document.getElementById(this.timeid).value = this.time;
}
}.bind(this));
if (params.default) {
this.datetimeObservable(params.default);
}
['min', 'max'].forEach(function(minmax) {
if (params[minmax]) {
this[minmax] = params[minmax].getFullYear() + '-' + ('00' + (params[minmax].getMonth() + 1)).slice(-2) + '-' + ('00' + params[minmax].getDate()).slice(-2)
} else { this[minmax] = ''; }
});
this.update = function(data, event) {
dateElm = document.getElementById(this.dateid);
timeElm = document.getElementById(this.timeid);
if (
dateElm.value && timeElm.value &&
dateElm.value.match(/'d{4}-'d{2}-'d{2}/) && timeElm.value.match(/'d{2}:'d{2}/)
) {
data.datetimeObservable(new Date(dateElm.value + 'T' + timeElm.value));
} else {
data.datetimeObservable(null);
}
}.bind(this);
},
template:
'<div class="datetime-component"><div class="datetime-component-date">' +
'<input type="date" data-bind="attr: {id: dateid, min: min, max: max}, value: date, event: {change: update}">' +
'</div><div class="datetime-component-time">' +
'<input type="time" data-bind="attr: {id: timeid}, value: time, event: {change: update}">' +
'</div></div>'
});
如果有任何问题请告诉我
相关文章:
- 单击时角度刷新模型
- 在 ASP 中请求后刷新模型.MVC
- Ember数据:在DS.Store.createRecord上刷新模型
- 如何使用映射插件刷新挖空视图模型
- 余烬需要刷新浏览器才能获取模型数据
- Ember JS - 从路由操作更新/刷新模型数据
- 刷新过滤器(在项目上),而不更改 ng 重复模型
- 在挖空.js中删除数据后刷新视图模型
- 刷新视图模型和 AJAX 调用后的视图
- 检测视图模型属性是否在不刷新的情况下发生更改
- 在模型更改时刷新 Dojo MVC 组不适用于复杂对象
- Knockoutjs的日期时间字段更新不会刷新模型视图
- 当模型在jQuery事件中发生改变时,Angular 2不会刷新视图
- Backbonejs:模型获取意味着模型未“刷新”
- AngularJS在模型因事件而改变后不刷新视图
- 烬刷新模型从当前路线
- 如果hasMany不存在,则刷新模型
- 如何在使用主干调用save时刷新模型的属性
- Ember.js 路由:查询参数上的“刷新模型:true”,而不更新子路由模型
- 单击按钮时刷新模型