2012-05-19 67 views
0

我有一個情況我到數據綁定日期字段中模型的列表:knockout.js - 後函數調用數據綁定自動更新

function Model(data) { 
    var self = this; 
    ko.mapping.fromJS(data, {}, this); 
} 

<div id="fieldOnPage" data-bind="text: formatDate(myDateField())"></div> 

然後,在一個模式,我顯示相同日期字段,以便它可以編輯:

<div id="fieldInModal" data-bind="text: formatDate(myDateField())"></div> 

然而,由於我打電話formatDate函數執行其上展開的觀察的工作,我無法看到的變化被寫入實時返回到主頁當我編輯模態中的值時。

另一個需要注意的是,我使用ko.mapping插件,所以我沒有必要對myDateField特定ko.computed場。這可能與這樣的外部功能有關嗎?如果不是,如果我必須專門重寫myDateField綁定,我將如何使用ko.computed來執行此操作?

回答

1

你可以做類似

function Model(data) { 
    var self = this; 
    ko.mapping.fromJS(data, {}, this); 

    this.formattedDate = ko.computed(function() { 
     return formatDate(ko.utils.unwrapObservable(self.myDateField)); 
    }); 
} 

綁定到格式化的日期

<div id="fieldInModal" data-bind="text: formattedDate"></div> 

希望這有助於。

+0

嘿!再次感謝您的回覆。這是一個好的開始。但是,我希望頁面上的字段也與模式中的綁定字段同步更新。如果可能的話。我注意到頁面上的綁定字段沒有用這個策略進行更新。 –

+0

無論何時更新Model.myDateField,計算的formattedDate都會更新。如果我理解正確,Modal將綁定到底層頁面字段的副本。您應該重新思考如何構建模式視圖模型,以從頁面視圖模型獲取引用。直到我看到更多的代碼,這很難說。你能否更新一個完整的例子,顯示頁面和模式不能一起工作。 – madcapnmckay

+0

默認情況下,計算的觀察值不可寫。考慮一下,如何才能淘汰用於創建價值的功能。你只需要讓@ madcapnmckay的例子工作就可以使formattedDate成爲一個可寫的計算值。以下是文檔http://knockoutjs.com/documentation/computedObservables.html。向下滾動到可寫計算部分。 –