如何使用输入框中的值更新ko.computed?

时间:2015-10-13 14:45:47

标签: knockout.js

我正在格式化输入框的值,该输入框使用ko.computed接受日期,如下所示:

self.formatBillDate = ko.computed(function(){
        var billDate = self.basicData().billDate();
        return billDate[1]+"/"+billDate[2]+"/"+billDate[0];
    }
});

我知道我需要具有读写功能,以便我可以更新日期。但我不知道该怎么做。我尝试了一些代码,但我仍然在计算值上得到写入错误。有人可以帮忙吗?

3 个答案:

答案 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
    }
});

更新1

如果您将帐单日期作为斜线分隔字符串输入,则可以使用以下内容:

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