簡體   English   中英

KnockoutJS自定義綁定范圍問題

[英]KnockoutJS custom binding scoping issue

我有一個自定義綁定,它像這樣覆蓋替代敲除程序的單擊處理程序:

var originalInit = ko.bindingHandlers.click.init,
    originalUpdate = ko.bindingHandlers.click.update;

ko.bindingHandlers.click = {
    init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {

        var wrappedValueAccessor = function() {
            return function(data, event) {
                var disabled = allBindingsAccessor.get('disabled');
                var clickResult = valueAccessor().call(viewModel, data, event);

                if (clickResult && typeof clickResult.always === "function") {
                    $(element).attr('disabled','disabled');
                    clickResult.always(function(){
                        $(element).removeAttr('disabled');
                    });
                }

            };

        };

        originalInit(element, wrappedValueAccessor, allBindingsAccessor, viewModel, context);
    },
    update: originalUpdate
};

在這里找到小提琴: http : //jsfiddle.net/92q5vgfp/

問題是,當我嘗試從Chrome調試器單擊時訪問allBindingsAccessor時,它不可用。

但是,如果我有console.log(allBindingsAccessor),chrome的調試器可以看到它。

更新因此,當我寫這篇文章時,我們嘗試了一個隨機的事情,那就是在返回變量之前將函數分配給變量。 那行得通。 不知道為什么或如何。

var wrappedValueAccessor = function() {
            var test = function(data, event) {
                ...
            };
            return test;
};

這就是我的問題,為什么要將該函數分配給本地var並使其返回工作狀態,而不是直接將其返回? 這是Chrome的錯誤還是預期的錯誤(以某種方式)?

在鏈接的代碼段中,內部函數內部未訪問allBindingsAccessor,因此v8只是對其進行了優化,而不添加到函數閉包中。 有關更多詳細信息,請參見crbug.com/172386

暫無
暫無

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

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