我試圖實現以下建議,但每次值更新時都沒有觸發所需的響應。這可能是由於我是Knockout的新手而引起的。敲除 - 無法使用訂閱更新可觀察值(由於擴展驗證)
我有一個綁定到TextBoxFor的observable(金額)。
@Html.TextBoxFor(m => m.Amount, new { type = "number", data_bind = "value: Amount" })
當輸入值時,它需要被驗證,以確保它不超過999999。除此之外,如果該值小於50則需要將其設定爲50。這些檢查需要每當'金額'發生變化時,
var viewModel = {
Amount: ko.observable().extend({numeric: 0, max: 999999})
};
我試過實施的解決方案(在我以前的帖子的答案),但我無法讓這些工作。
我想出的最好的是創建一個計算如下。這將檢查輸入值並在第一次嘗試時正確更新。後續的值更改不會在屏幕上觸發更改,而是逐步執行代碼,似乎會更新ViewModel.Amount值。
@Html.TextBoxFor(m => m.Amount, new { type = "number", data_bind = "value: amountMin" })
quoteVehicleViewModel.VehicleMileage = ko.observable(0);
viewModel.amountMin = ko.computed({
read: function() {
return viewModel.Amount();
},
write: function (value) {
if (value < 50) {
viewModel.Amount(50);
}
}
}).extend({ numeric: 0, max: 999999 });
** A「viewModel.Amount()」中的控制檯中輸入顯示值作爲是1000,但在屏幕上的值仍然示出了作爲輸入值。
任何幫助,感激地接受
約翰
非常感謝您的回覆Joseph - 我已經看到您的JSFiddle正常工作。我嘗試過在我的解決方案中實現,雖然我可以看到coerceMin函數在頁面加載時運行,但當我更改文本框中的值時不會命中。除了你在下面添加的代碼外,是否還有其他要求執行此操作的密鑰(來自JSFiddle)? – JohnT 2013-04-22 16:15:45
有一個鬼祟的線'ko.validation.registerExtenders();'我沒有把它放在實際的擴展片段中。你有沒有把這行加入你的代碼? – 2013-04-22 18:08:05
你好。是的,我已經包含了registerExtender,並且coerceMin代碼在頁面加載時觸發,而不是在輸入值時觸發。謝謝 – JohnT 2013-04-22 21:10:48