IT박스

ko.utils.unwrapObservable을 언제 사용해야합니까?

itboxs 2020. 7. 29. 07:58
반응형

ko.utils.unwrapObservable을 언제 사용해야합니까?


KnockoutJS를 사용하여 몇 가지 사용자 정의 바인딩을 작성했습니다. 언제 사용 ko.utils.unwrapObservable(item)해야하는지 잘 모르겠습니다 . 코드를 보면, 그 호출은 기본적으로 item관찰 가능한지 확인합니다. 그렇다면 값을 반환하고 그렇지 않으면 값을 반환하십시오. 사용자 정의 바인딩 작성에 대한 녹아웃 섹션을 살펴보면 다음 구문이 있습니다.

var value = valueAccessor(), allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);

이 경우, 그들은을 통해 관찰을 호출 ()하지만 또한 전화 ko.utils.unwrapObservable. 나는 단지 하나를 사용할 때 또는 다른 것을 사용할 때 또는 항상 위의 패턴을 따르고 두 가지를 모두 사용해야하는 경우를 다루려고합니다.


당신은 사용해야 ko.utils.unwrapObservable당신이 관찰을 부여하거나되지 않은 경우 당신이 모르는 곳의 경우. 이것은 일반적으로 관찰 가능 또는 관찰 불가능이 바인딩 될 수있는 사용자 정의 바인딩에 있습니다.

위의 코드에서에 대한 호출 valueAccessor()은 실제로 관찰 가능을 풀지 않습니다. 올바른 컨텍스트에서 바인딩에 전달 된 값을 검색하는 것입니다 (보호하기 위해 함수로 래핑 됨). 의 반환 값은 valueAccessor()관찰 가능하거나 그렇지 않을 수 있습니다. 바인딩에 전달 된 것입니다.


이전 답변은 정확하지만 종종 사용자 정의 바인딩 (권한을 확인하거나 다른 것을 기반으로 수행 할 작업을 결정하는 기능)에 함수를 전달합니다. 내가 실제로 필요한 것은 관찰 가능하지 않더라도 모든 기능을 해제하는 것이 었습니다.

다음은 모든 것을 재귀 적으로 풀어줍니다.

ko.utils.unwrapFunction = function (func) {
    if (typeof func != 'function') {
        return func;
    }
    else {
        return ko.utils.unwrapFunction(func());
    }
};

다음은 내가 작성한 간단한 사용자 정의 바인딩의 예입니다.

//replaces single and double 'smart' quotes users commonly paste in from word into textareas and textboxes with normal text equivalents
//USAGE:
//data-bind="replaceWordChars:true
//also works with valueUpdate:'keyup' if you want"

ko.bindingHandlers.replaceWordChars = {
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        var bindingValue = ko.utils.unwrapFunction(valueAccessor);

        if (bindingValue) {
            $(element).val(removeMSWordChars(allBindingsAccessor().value())); //update DOM - not sure why I should need to do this, but just updating viewModel doesn't always update DOM correctly for me
            allBindingsAccessor().value($(element).val()); //update viewModel
        }
    }
}

이 방법으로 bindingValue는 항상 값을 포함합니다. 함수, 옵저버 블, 값 또는 옵저버 블 내부의 함수를 전달했는지 걱정할 필요가 없습니다. 이것은 내가 원하는 객체에 도달 할 때까지 모든 것을 올바르게 풀어줍니다.

누군가에게 도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/9624401/when-to-use-ko-utils-unwrapobservable

반응형