[英]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.