2015-09-14 83 views
0

如何在第一次設置date1時(更準確地說,當date2爲空時)將date2設置爲與date1相同的值?這個邏輯/函數應該在將數據模型映射到observable時引入(但是,date2值不應該在映射中設置爲date1值,只是通過數據綁定設置時)。在knockout.js中修改其他屬性的值更改

數據模型

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

綁定

data-bind="value: date1" 

映射

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

我試圖閱讀淘汰賽JS文件,但未能找到一種方法如何攔截更新日期1價值與我自己的功能。

我知道subscribe,但它確實爲我提供了新的價值,而不是上下文。

回答

1

您可以添加訂閱到您的date1 observable並設置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()) 
} 

小提琴:https://jsfiddle.net/newuserjs/1m62wpym/1/

+0

當日期1經由數據只,映射期間不結合設置的日期1值傳播應該這樣做。用戶案例是,在大多數情況下,date2將與date1相同,因此如果用戶填入date1,則應預先填充date2。這個邏輯不應該在映射期間被觸發。通過提到的映射我的意思是,應該在映射期間添加複製值的函數。如果問題不清楚,請道歉。 – alik

+0

@alik好吧。像這樣的https://jsfiddle.net/newuserjs/1m62wpym/1/ – Dandy

+0

太好了。請更新答案,以便我可以接受它。 – alik