[英]Conditional update in custom binding
我有一個自定義綁定,該綁定用於在viewmodel上更改字段(“類型”)時重新初始化dom元素。 這是在更新回調中定義的。
<input type="text" data-bind="value: Value, initValueField: Type()" />
ko.bindingHandlers.initValueField = {
update:function (element, valueAccessor, allBindingsAccessor, viewModel) {
alert('Hello World');
}
};
有關簡化的演示,請參見此jsFiddle 。
據我了解,調用更新的條件之一是:
每當觸發同一數據綁定屬性中的另一個綁定時。 這有助於確保在更改選項時,像該值之類的事情是適當的。
我的問題是,每當viewmodel的值更改時,也會調用此更新回調。
所以... 有可能:
我在這里找到了解決該問題的方法:
選項包括:
init
使用計算得出的可觀察值來手動管理更新。 您也許可以檢查觀察到的變化。 然后才執行操作。 像這樣:
(function () {
var cache;
ko.bindingHandlers.initValueField = {
init:function (element, valueAccessor, allBindingsAccessor, viewModel) {
var currentValue = valueAccessor();
cache = currentValue();
},
update:function (element, valueAccessor, allBindingsAccessor, viewModel) {
var currentValue = valueAccessor();
if (cache !== currentValue()) {
alert('Hello World');
cache = currentValue();
}
}
};
}());
緩存變量存儲可觀察值的舊值。 僅當當前值與此舊值不同時才發出警報 。
工作提琴: http : //jsfiddle.net/DMLzd/6/
您可以在自定義綁定中使用element
參數來查看調用該綁定的DOM元素。 有關自定義綁定中的條件條件,請參見http://jsfiddle.net/DMLzd/7/ ,該條件使用文本框的id
屬性來決定是否執行操作。 我添加了其他具有不同ID的文本框和按鈕,用於調用自定義綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.