【发布时间】:2017-11-19 05:26:15
【问题描述】:
我需要计算一组日期时间服务器端,允许更改日期/时间客户端。 下面的代码根据加载服务器数据工作,并将我需要的 iso 字段添加回服务器上。
当用户更改日期/时间输入字段时,如何使 iso 字段可动态计算?
到目前为止淘汰 JS:
var ViewModel = function() {
var self = this;
// ...other first-level observables and funct
function scadenzeNuove(payload) {
ko.mapping.fromJS(payload, {}, this);
this.iso = ko.pureComputed( function() {
var data_re = /^(\d{2})\/(\d{2})\/(\d{4})T(\d{2}):(\d{2})/;
if (!payload.data) {
return false;
};
var data_string = payload.data;
if (!payload.ora) {
data_string = data_string + 'T00:00';
} else {
data_string = data_string + 'T' + payload.ora;
};
var data_match = data_re.exec(data_string) ? data_re.exec(data_string) : false;
if (!data_match) { return false; };
var data = new Date(data_match[3], data_match[2]-1, data_match[1], data_match[4], data_match[5])
return data;
}, this);
};
var scadenzeNuoveMapping = {
create: function(options) {
return new scadenzeNuove(options.data);
},
};
self.scadenzeNuove = ko.observableArray();
self.compScadenze = function(form) {
$.getJSON('{{ compute_scadenza }}', $(form).serialize(), function(data){
ko.mapping.fromJS(data, scadenzeNuoveMapping, self.scadenzeNuove);
});
};
};
var vm = new ViewModel()
ko.applyBindings(vm);
HTML:
<div data-bind="if: scadenzeNuove">
<ul data-bind="foreach: scadenzeNuove">
<li>
<span data-bind="text: iso().toLocaleFormat()"></span>
<input type="text" name="n_data" data-bind="value: data">
<input type="text" name="n_ora" data-bind="value: ora">
<input type="text" name="n_desc" data-bind="value: desc">
</li>
</ul>
</div>
【问题讨论】:
-
我想问题是iso属性没有被映射,因为映射调用发生在之前......但我不知道如何应用正确的时间......
-
我尝试使用this response 中所示的裸 ko.computed 但仍然无法正常工作:iso 字段不会随着组件字段值的变化而更新。
标签: knockout.js knockout-mapping-plugin