녹아웃 : 계산 된 관찰 가능 vs 함수
녹아웃을 사용할 때 간단한 함수가 아닌 읽기 전용 계산 관찰 가능 항목을 사용하면 어떤 이점이 있습니까?
예를 들어 다음 뷰 모델 생성자와 html 스 니펫을 사용합니다.
var ViewModel = function(){
var self = this;
self.someProperty = ko.observable("abc");
self.anotherProperty = ko.observable("xyz");
self.someComputedProperty = function(){
return self.someProperty() + self.anotherProperty();
};
};
<input data-bind="value: someProperty"/>
<input data-bind="value: anotherProperty"/>
<p data-bind="text: someComputedProperty()"></p>
여기에있는 모든 것이 예상대로 작동하는 것처럼 보이므로 대신 사용해야하는 이유가 있습니다.
var ViewModel = function(){
var self = this;
self.someProperty = ko.observable("abc");
self.anotherProperty = ko.observable("xyz");
self.someComputedProperty = ko.computed(function(){
return self.someProperty() + self.anotherProperty();
});
};
<input data-bind="value: someProperty"/>
<input data-bind="value: anotherProperty"/>
<p data-bind="text: someComputedProperty"></p>
http://knockoutjs.com/documentation/computedObservables.html 의 문서에 "... 선언적 바인딩은 단순히 계산 된 관찰 가능 항목으로 구현됩니다"라고 명시되어 있으므로 내 뷰 모델에서 명시 적으로 사용할 필요가 있음을 의미합니다. ?
계산 된 Observable의 유일한 목적이 그것에 대해 간단한 바인딩을 수행하는 것이라면 함수를 사용하는 것이 동일합니다. 바인딩은 종속성을 추적하기 위해 계산 된 Observable 내부에 구현되므로 Observable이 변경되면 바인딩을 다시 트리거합니다.
다음은 계산 된 관찰 가능 항목과 함수에 대해 고려해야 할 몇 가지 사항입니다.
계산 된 관찰 가능 항목의 값은 캐시되므로 생성 될 때와 종속성이 업데이트 될 때만 업데이트됩니다. 일반 함수의 경우 매번 논리를 실행해야합니다. 많은 것들이 그 값에 의존한다면 (컬렉션의 각 항목이 부모의 값에 대해 바인딩되는 경우)이 논리는 계속해서 실행됩니다.
JavaScript에서 다른 Observable처럼 계산 된 Observable을 자유롭게 사용할 수 있습니다. 즉, 수동 구독을 생성하고 다른 계산에서 의존 할 수 있습니다 (함수를 호출하면이 종속성도 생성됨). KO의 일반 유틸리티 메서드를 사용
ko.utils.unwrapObservable
하여 일반적으로 함수로 호출해야하는지 값을 검색하지 않아도되는지 여부를 결정할 수 있습니다.궁극적으로 값을 서버로 전달하려는 경우 계산 된 관찰 가능 항목이 JSON 출력에 자연스럽게 표시되는 반면 일반 함수의 결과 인 값은 JSON으로 변환 될 때 사라집니다 (더 많은 작업을 수행해야합니다. 먼저 해당 함수에서 속성을 채 웁니다).
참조 URL : https://stackoverflow.com/questions/11527760/knockout-computed-observable-vs-function
'programing' 카테고리의 다른 글
Visual Studio 2010에서 병렬 빌드를 수행하려면 어떻게해야합니까? (0) | 2021.01.15 |
---|---|
C ++ 11은 std :: function 또는 lambda 함수가 관련된 경우 유형을 추론하지 않습니다. (0) | 2021.01.15 |
PDO bindParam 대 실행 (0) | 2021.01.15 |
모니터 (DDMS) 도구를 사용하여 애플리케이션을 디버그하는 방법 (0) | 2021.01.15 |
초기화 목록과 함께 std :: array 사용 (0) | 2021.01.14 |