根据 knockout.js 中的值更改修改其他 属性

Modify other property on value change in knockout.js

如何在第一次设置date1时(更准确地说,当date2为null时)将date2设置为与date1相同的值?这个 logic/function 应该在将数据模型映射到可观察对象时引入(但是,date2 值不应该在映射时设置为 date1 值,只是在通过数据绑定设置时)。

数据模型

var dataModel = {
     'agenda': {
         months: [{date1: null, date2: null}],
     }
}

绑定

data-bind="value: date1"

映射

var observableModel = ko.mapping.fromJS(dataModel);

我已尝试阅读 Knockout JS 文档,但未能找到如何使用我自己的函数拦截更新 date1 值的方法。

我知道 subscribe 但它确实为我提供了新的价值,而不是上下文。

您可以添加对 date1 可观察对象的订阅并像这样设置 date2 对象。

ko.utils.arrayForEach(observableModel.agenda.months(), function(obj){
  obj.date1.subscribe(function(){ date2Handler(obj.date1, obj.date2)});  
});

function date2Handler(date1,date2){
    if(date2()==null)
        date2(date1())
}

Fiddle: https://jsfiddle.net/newuserjs/1m62wpym/1/