簡體   English   中英

淘汰賽自定義綁定不會觸發可觀察到的更新

[英]Knockout custom binding not triggering for Update to observable

我有一個簡單的綁定測試。 頁面打開時將調用Init和Update。 但是,如果我通過調用函數來手動更新可引用對象,則不會在綁定處理程序中調用update方法。

因此,它首先將selectedQueue設置為2。正確單擊按鈕會在選擇中選擇第三個元素。 但是沒有要求我的綁定處理程序進行此更改。

有什么簡單的我想念的嗎?

    <select id="productGroup" name="productGroupen" data-bind="value:selectedQueue, treeMenu: selectedQueue">
    <option value="1" selected="selected">Group 1</option>
    <option value="2">Group 2</option>
    <option value="3">Group 3</option>
</select>

<div data-bind="text: selectedQueue"></div>

<button data-bind="click:setQueue">Set to 3</button>

    <script src="~/Scripts/knockout-3.4.0.js"></script>

    <script>

        ko.bindingHandlers.treeMenu = {
            init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
                alert("init")
                x = valueAccessor();
            },
            update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
                alert("update");
                x = valueAccessor();
            }
        };


        var Model = function () {
            self = this;

            this.selectedQueue = ko.observable(2);
            this.setQueue = function () {
                this.selectedQueue(3);

            }

        }
        $(document).ready(function () {
            ko.applyBindings(new Model());
        });


    </script>

就我而言,問題是使用剔除3.4

如下將我的淘汰賽更改為2.2.1,問題消失了。

<script src="http://knockoutjs.com/downloads/knockout-2.2.1.debug.js"></script>

不知道問題是什么。

淘汰賽文檔說:

當綁定應用於元素時,Knockout會首先調用update回調,並跟蹤您訪問的所有依賴項(可觀察對象/計算對象)。 當這些依賴項中的任何一個發生更改時,將再次調用update回調。

而且在您的代碼中,您還沒有訪問“實際可觀察​​到的”,因為valueAccessor()僅獲取傳遞的值。 因此,對此沒有任何依賴關系,並且不會調用update

你需要用你的valueAccessor()ko.unwrap或致電valueAccessor()()獲得“實際觀察到的”。

update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
    alert("update");
    x = ko.unwrap(valueAccessor());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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