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
'IT박스' 카테고리의 다른 글
Gradle,“sourceCompatibility”대“targetCompatibility”? (0) | 2020.07.29 |
---|---|
getImageData () 오류 수정 방법 교차 출처 데이터로 인해 캔버스가 오염 되었습니까? (0) | 2020.07.29 |
왜 항상 ./configure; (0) | 2020.07.29 |
특정 문자열 상수를 제외하는 RegEx (0) | 2020.07.29 |
팬더 조인 문제 : 열이 겹치지 만 접미사가 지정되지 않았습니다. (0) | 2020.07.29 |