我正在格式化输入框的值,该输入框使用ko.computed
接受日期,如下所示:
self.formatBillDate = ko.computed(function(){
var billDate = self.basicData().billDate();
return billDate[1]+"/"+billDate[2]+"/"+billDate[0];
}
});
我知道我需要具有读写功能,以便我可以更新日期。但我不知道该怎么做。我尝试了一些代码,但我仍然在计算值上得到写入错误。有人可以帮忙吗?
答案 0 :(得分:3)
您可以按照关于网站http://knockoutjs.com/documentation/computed-writable.html
的文档,使计算变量可写您的代码与此类似,请查看我为其创建的jsfiddle https://jsfiddle.net/0wa1mkc9/:
function viewModel(){
var self = this;
self.billDate = ko.observable("10/10/2015");
self.formatBillDate = ko.computed(
{
read :function(){
var d =new Date(self.billDate());
return (d.getMonth()+1)+"-"+d.getDate()+"-"+d.getFullYear();
},
write:function(value){
var d= new Date(value);
self.billDate((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear());
},
owner:self
});
}
答案 1 :(得分:0)
你应该使用可写的计算,例如:
self.formatBillDate = ko.computed({
read: function() {
var billDate = self.basicData().billDate();
return billDate[1]+"/"+billDate[2]+"/"+billDate[0];
},
write: function(newVal) {
// some code to store new value in your variable
}
});
如果您将帐单日期作为斜线分隔字符串输入,则可以使用以下内容:
self.formatBillDate = ko.computed({
read: function() {
var billDate = self.basicData().billDate();
return billDate[1]+"/"+billDate[2]+"/"+billDate[0];
},
write: function(newVal) {
var values = newVal.split("/");
self.basicData().billDate()[0] = values[2];
self.basicData().billDate()[1] = values[0];
self.basicData().billDate()[2] = values[1];
}
});
如果您将帐单日期作为DateTime输入,则可以使用以下内容:
self.formatBillDate = ko.computed({
read: function() {
var billDate = self.basicData().billDate();
return billDate[1]+"/"+billDate[2]+"/"+billDate[0];
},
write: function(newVal) {
self.basicData().billDate()[0] = newVal.getFullYear();
self.basicData().billDate()[1] = newVal.getDate();
self.basicData().billDate()[2] = newVal.getMonth();
}
});
可能是另一个代码取决于您用来编辑账单日期的日期输入控制。
答案 2 :(得分:0)
其他答案是正确的,您需要为计算的observable包含python mycode.py
{...}
^D
函数。这是你的看法:
write