당신은 foreach binding을 사용하는 요소 내부에 익명 템플릿을 직접 포함시켜 정확히 동일한 결과를 얻을 수 있습니다.
템플릿을 사용하는 두 번째 방법은 녹아웃을 타사 템플릿 엔진에 연결하는 것입니다. 녹아웃은 모델 값을 외부 템플릿 엔진으로 전달하고 결과 마크 업 문자열을 문서에 주입합니다. 및 밑바닥을 사용하는 예는 템플릿 엔진을 확인하십시오.
관측 가능성 확장
Knockout Observables는 해당 값이 변경 될 때 읽기/쓰기 값을 지원하고 가입자에게 알리는 데 필요한 기본 기능을 제공합니다. 그러나 어떤 경우에는 관찰 가능한 추가 특성을 추가하는 것과 같은 관찰 가능한에 추가 기능을 추가 할 수도 있습니다. 녹아웃 익스텐더는 쉽고 유연한 방법을 제공합니다. <ul data-bind="foreach: daysOfWeek">
<li>
<span data-bind="text: $data"></span>
</li>
</ul>
<script type="text/javascript">
function viewModel() {
var self = this;
self.daysOfWeek = ko.observableArray([
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
]);
};
ko.applyBindings(new viewModel());
</script>
extender를 만드는 데 ko.extenders 객체에 함수를 추가하는 것이 포함됩니다. 이 함수는 관찰 가능한 자체를 첫 번째 인수와 두 번째 인수의 옵션으로 취합니다. 그런 다음 관찰 가능성을 반환하거나 원래 관측 가능성을 어떤 방식으로 사용하는 계산 가능한 관찰 가능한 것과 같은 새로운 것을 반환 할 수 있습니다. .
이제 우리는 힌트 메시지를 보여줄 수있는 능력을 추가하는 관찰 가능한 익스텐더를 만들 것입니다.
커스텀 바인딩
Knockout의 내장 바인딩은 대부분의 바인딩 시나리오를 처리 할 수 있지만, 다루지 않은 특수 바인딩 시나리오를 만나면 녹아웃으로 사용자 정의 바인딩을 만들 수있어 정교한 동작을 반복하기 쉬운 방법. 예를 들어, 사용자 정의 바인딩 형태로 그리드, 탭 세트 등과 같은 대화 형 구성 요소를 만들 수 있습니다.
녹아웃 바인딩은 두 가지 방법으로 구성됩니다 : Init and Update. 바인딩 생성은이 두 가지 메소드로 객체를 작성하고 아래와 같이 ko.bindinghandlers를 사용하여 녹아웃으로 해당 객체를 등록하는 것만 큼 간단합니다.<table>
<thead>
<tr><th>Title</th><th>Author</th></tr>
</thead>
<tbody data-bind="foreach: books">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: author"></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function viewModel() {
var self = this;
self.books = ko.observableArray([
{ title: 'The Secret', author: 'Rhonda Byrne' },
{ title: 'The Power', author: 'Rhonda Byrne' },
{ title: 'The Magic', author: 'Rhonda Byrne' }
]);
}
ko.applyBindings(new viewModel());
</script>
init 함수는이 요소에 대해 바인딩이 처음으로 평가되는 경우에만 실행됩니다. 이것은 일반적으로 일회성 초기화 코드를 실행하거나 UI에서 트리거되는 이벤트를 기반으로 뷰 모델을 업데이트 할 수있는 이벤트 처리기를 연결하는 데 사용됩니다.
업데이트 함수는 연관된 관찰 가능성이 수정 될 때 응답하는 방법을 제공합니다. 일반적으로 이것은 뷰 모델의 변경 사항을 기반으로 UI를 업데이트하는 데 사용됩니다.
init 및 업데이트 기능에는 4 개의 매개 변수가 제공됩니다. 일반적으로 뷰 모델을 UI에 연결하는 표준 방법이므로 요소 및 ValueAccessor 매개 변수에 집중하고 싶을 것입니다. 실제로 Init 및 Update Callbacks를 모두 제공 할 필요는 없습니다. 필요한 전부라면 하나 또는 다른 하나만 제공 할 수 있습니다.
.
요소 매개 변수는 바인딩을 포함하는 DOM 요소에 직접 액세스 할 수 있습니다.
ValueAccessor 매개 변수는 바인딩에 전달 된 내용에 액세스 할 수있는 함수입니다. 관찰 가능한 것을 통과하면이 기능의 결과는 그 관찰 가능 (그 가치가 아님)입니다. 바인딩에서 표현을 사용한 경우 ValueAcessor의 결과가 표현의 결과가됩니다.
AllBindingSaccessor 매개 변수는 동일한 데이터 바인드 속성에 나열된 다른 모든 바인딩에 액세스 할 수 있습니다. 이것은 일반적 으로이 바인딩과 상호 작용하는 다른 바인딩에 접근하는 데 사용됩니다. 이러한 바인딩은 그와 관련된 코드가 없을 가능성이 높으며 여러 속성이있는 객체를 기본 바인딩에 전달하지 않는 한 추가 옵션을 바인딩에 전달하는 방법 일뿐입니다. 예를 들어, 옵션 value, 옵션 직원 및 옵션 커넥션은 옵션 바인딩에 옵션을 전달하는 데 사용되는 바인딩입니다.
뷰 모델 매개 변수는 템플릿 외부의 바인딩에 대한 전체 뷰 모델에 대한 액세스를 제공합니다. 템플릿 내에서 이것은 템플릿에 바인딩되는 데이터로 설정됩니다. 예를 들어, 템플릿 바인딩의 Foreach 옵션을 사용하면 뷰 모델 매개 변수가 템플릿을 통해 전송되는 현재 배열 멤버로 설정됩니다. 대부분의 경우 ValueAccessor는 원하는 데이터를 제공하지만 기능을 호출/적용 할 때 대상이되기 위해 개체가 필요한 경우 ViewModel 매개 변수가 특히 유용합니다.
다음 예에서 우리는 초점이 맞춰 질 때 텍스트의 확장을하는 사용자 정의 바인딩을 만듭니다.
먼저, init 함수에서 우리는 요소가 초점을 맞추면 그 값이 true로 설정되고 그 반대도 마찬가지라고 선언합니다. 그런 다음 업데이트 기능에서 AllBindingAccessor 매개 변수를 사용하여 바인딩에 추가 옵션을 추가합니다 - ScaleUp 및 Scaledown. 우리는 ko.utils.unwrapobservable을 사용하여 현재 바인딩 값을 얻고 그것이 true로 설정되었는지 확인합니다. 그렇다면 DOM 요소가 조정되고, 그렇지 않으면 축소됩니다. . 마침내 힌트를 결합한 예제를 보자.
당신은 힌트를 관찰 가능하고 scaleonfocus 바인딩을 별도의 파일에 배치 한 다음 주 파일에 포함시킬 수 있습니다. 이렇게하면 코드가 모듈화되어 원할 때마다 재사용 할 수 있습니다.
그게 다야, 여러분! 이 시리즈를 즐겼기를 바랍니다. 이제 녹아웃을 시작하고 계속 배우고 실험하는 데 필요한 모든 지식이 있습니다. 보다 포괄적 인 예제와 튜토리얼을 보려면 녹아웃 사이트로 이동할 수 있습니다.
knockoutjs <table>
<thead>
<tr><th>Title</th><th>Author</th></tr>
</thead>
<tbody data-bind="foreach: books">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: author"></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
function viewModel() {
var self = this;
self.books = ko.observableArray([
{ title: 'The Secret', author: 'Rhonda Byrne' },
{ title: 'The Power', author: 'Rhonda Byrne' },
{ title: 'The Magic', author: 'Rhonda Byrne' }
]);
}
ko.applyBindings(new viewModel());
</script>
에 대해 자주 묻는 질문
ko.utils.unwrapobservable의 목적은 무엇입니까? 이 기능은 관찰 가능하거나 관찰 할 수없는 것을 다루는 지 확실하지 않은 경우 특히 유용합니다. 각각에 대해 별도의 코드를 작성하지 않고도 두 경우를 모두 처리 할 수 있습니다. 이 기능은 관측 가능성으로 작업 할 수있는 추가 기능을 제공하는 Knockoutjs의 유틸리티 기능의 일부입니다. HTML 섹션에 항목 배열. 배열의 각 항목에 대한 관련 DOM 요소와 그 후손을 복제하여 루프를 만듭니다. 이것은 UI에 항목 목록을 표시 할 때 특히 유용합니다. Foreach 바인딩은 또한 각 반복에 대한 컨텍스트를 제공하여 $ data 키워드를 사용하여 현재 항목에 액세스 할 수 있습니다. Knockoutjs의 매핑 플러그인은 무엇입니까?
Knockoutjs의 매핑 플러그인은 다음과 같습니다. JSON 객체를 관찰 가능한 객체로 변환하는 데 도움이되는 유틸리티. 이것은 서버에서 데이터로 작업 할 때 특히 유용합니다. 매핑 플러그인을 사용하면 데이터가 뷰 모델에 쉽게 매핑 할 수 있으며 매핑 프로세스를 사용자 정의 할 수있는 옵션도 제공합니다. 컬렉션에서 컬렉션으로 작업 할 수있는 방법?
컬렉션으로 작업 할 수 있습니다. Knockoutjs에서는 관찰 가능한 배열의 도움으로 쉽게 만들어집니다. 관찰 가능한 어레이는 다양한 값을 보유하는 특수한 유형의 관측 가능입니다. 푸시, 팝, 시프트, 시프트, 리버스, 정렬 및 스플 라이스와 같은 배열을 조작하는 기능을 제공합니다. 관찰 가능한 배열은 항목이 추가되거나 제거 될 때 가입자에게 알리므로 UI를 데이터와 동기화 할 수 있도록 쉽게 유지할 수 있습니다.
Knockoutjs에서 문제를 발견했습니다. Knockoutjs에서 문제를 발견 한 경우 Knockoutjs Github 페이지에서보고 할 수 있습니다. 문제를보고하기 전에 다른 사람이 문제를 이미보고했는지 확인하는 것이 좋습니다. 그렇지 않은 경우 새로운 문제를 만들고 가능한 한 많은 세부 사항을 제공하여 Knockoutjs 팀이 문제를 이해하고 해결할 수 있도록 도와 줄 수 있습니다.