【问题标题】:Knockout Custom binding for Timepart of date日期时间部分的淘汰赛自定义绑定
【发布时间】:2013-02-28 21:50:08
【问题描述】:

我是 Knockout 的新手。我有一个像这样的视图模型:

var Booking = function(data) {
    var self = this;

    self.BookingID = ko.observable(data.BookingID);
    self.BookingCustomerOrderID = ko.observable(data.BookingCustomerOrderID);
    self.BookingName = ko.observable(data.BookingName);
    self.BookingTreatmentGroupID = ko.observable(data.BookingTreatmentGroupID);
    self.BookingStartTime = ko.observable(data.BookingStratTime);
    self.BookingEndTime = ko.observable(data.BookingEndTime);

在我的表单中,我想让用户更改 StartTime 和 EndTime 的时间。我可以自定义绑定到从输入字段中离开日期部分的时间部分并更新模型吗?

只显示值这工作正常,但这不会更新视图模型。

  ko.bindingHandlers.timeVal = {
    update: function (element, valueAccessor) {
        var value = valueAccessor();
        var date = moment(value());
        var strDate = date.format('HH:mm');
        $(element).val(strDate);
    }
};

【问题讨论】:

  • 你能加个小提琴吗?
  • 你可以试试 self.BookingStartTime(strDate); 而不是 $(element).val(strDate);
  • 谢谢老大,但如果可能的话,我仍然想要viewmodel中的日期部分。

标签: javascript knockout.js


【解决方案1】:

查看documentation,您可以在 init 方法中将事件处理程序注册到元素上,并使用它来更新您的 observable。像这样的:

ko.bindingHandlers.hasFocus = {
    init: function(element, valueAccessor) {
        $(element).change(function() {
            if(this.val() != valueAccessor())
            {
                this.val(valueAccessor());
            }
        });          
    },
    update: function(element, valueAccessor) {
        var value = valueAccessor();
        var date = moment(value());
        var strDate = date.format('HH:mm');
        $(element).val(strDate);
    }
};

【讨论】:

  • 哈哈!我完全错过了那部分。它拼写出来不是吗。谢谢保罗!
猜你喜欢
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多