簡體   English   中英

自定義綁定中的條件更新

[英]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的值更改時,也會調用此更新回調。

所以... 有可能:

  1. 禁止調用自定義綁定的綁定之一。
  2. 在自定義綁定中檢測調用的源。

我在這里找到了解決該問題的方法:

Knockout.js性能陷阱#3-所有綁定一起觸發

選項包括:

  1. 通過將綁定放到單獨的元素(可能是容器元素)上來拆分綁定。
  2. 與第1點類似,但使用無容器綁定將它們分開。
  3. 在自定義綁定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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM