Knockout 빠른 시작 - 5: 당신이 알아야 할 최고의 기능 계속
9337 단어 knockout
Utilities
Knockout은 당신이 개발할 때 사용할 수 있는 많은 도구를 제공합니다. 당신은 ko에서 사용할 수 있습니다.utils 네임스페이스에서 찾을 수 있습니다. 가장 좋아하는 도구는 다음과 같습니다.
다음 코드는 사용 방법을 보여 준다.
// extend usage
var a = { val: 1 },
b = { val: 2 };
ko.utils.extend(a, b);
console.log(a.val); // console: 2
// unwrapObservable usage
var c = ko.observable(99), d = 98;
console.log(ko.utils.unwrapObservable(c)); // console: 99
console.log(ko.utils.unwrapObservable(d)); // console: 98
// array "map" utility function usage
var arr = [100, 101];
var mapped = ko.utils.arrayMap(arr, function (item) {
return item + 50;
})
console.log(arr); // console: [ 150, 151 ]
Data-bind statements
Knockout의 스크립트 라이브러리에 주목해 왔습니다. 실제로 Knockout은 자바스크립트 대상을 HTML에 간단하게 연결할 수 있도록 설계되었습니다.API는 HTML5와 호환되는 데이터-bind 구문을 사용합니다.앞의 예시에서 HTML 요소의 속성을 ViewModel의 속성에 간단하게 연결할 수 있습니다.데이터-bind 문법은 쉼표로 구분된 귀속 정의를 사용할 수 있으며, 아래의 예는 사용 방식을 보여 줍니다.
<span data-bind="text: myText"></span>
<div data-bind="visible: isVisible, with: someProp"></div>
<input data-bind="value: someVal,
css: {
'error': !someVal.isValid(),
'success': someVal.isValid()
}"/>
Applying bindings
applyBindings는 Knockout의 모든 작업이 시작되는 출발점입니다.대부분의 예에서는 ViewModel을 매개변수로 사용하는 방법을 보여 줍니다.그러나 두 번째 인자로 DOM 대상을 지정할 수 있습니다. Knockout은 이 DOM 노드와 하위 노드에만 연결됩니다.
대부분의 응용 프로그램은 하나의 View 모델만 있고 apply Binding을 호출할 때도 하나의 View 모델 매개 변수만 전달한다.그러나 나는 많은 복잡한 응용 프로그램을 만들었는데 한 페이지에 여러 개의 ViewModel 대상을 사용했고 여러 개의 ViewModel의 각각의 처리 알림, 설정, 그리고 현재 사용자의 정보 등을 사용했다.이러한 상황에서 Knockout이 바인딩된 노드의 수를 제한함으로써 성능의 장점을 얻을 수 있다.만약 페이지의 일부 내용만 업데이트할 필요가 있다면, Knockout을 통해 전체 페이지에 연결하지 마십시오.
Binding handlers
나는 일찍이 Knockout이 많은 확장점을 제공했다고 언급한 적이 있다.Knockout의 Binding handler보다 더 편리한 경우도 있습니다.데이터-bind 문법을 통해 bindinghandler를 실현했지만.Knockout은 연결된 프로세서를 사용자 정의할 수 있기 때문에, 사용자 정의 기능을 실행하거나, 다시 쓸 수 있습니다.
MVVM 스타일의 개발에서 우리는 두 가지 유형의 귀속이 있는데 그것이 바로 단방향과 양방향 귀속이다.단방향 귀속은 간단한 정보 읽기입니다. ViewModel의 데이터를 읽어서 DOM에 귀속시킵니다.양방향 데이터 연결은 단방향의 기초 위에서 DOM 대상의 업데이트를 ViewModel의 속성으로 되돌려주는 것이라고 상상할 수 있다.Knockout에서 모든 종류의 바인딩을 만들 수 있습니다. 다음 코드는 기본 프로세서의 사용을 보여 줍니다.
ko.bindingHandlers['myHandler'] = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
}
};
보시다시피 우리는 우리의 논리를 실현하기 위해 두 개의 갈고리를 제공했다.Init 및 업데이트 함수.이러한 함수의 매개변수는 다음과 같습니다.
너는 이 물건들이 보기에 그리 많지 않은데, 우리가 어디에서 우리의 업무 논리를 실현해야 한다고 생각할 수 있니?init 함수는 apply Binding을 호출할 때만 한 번 호출합니다.Knockout은 DOM 트리 전체를 훑어보고 데이터-bind 문법을 찾아서 처리하고 필요한 귀속에 init 방법을 호출합니다.그리고 init 방법을 호출한 후 업데이트 방법을 즉시 호출합니다. 이후에 귀속이 변할 때 이 방법을 여러 번 호출합니다. (Subscribable일 경우)
내 처리 방식은 init에 내 모든 이벤트 프로세서 (change,blur,focus) 를 등록하고 업데이트에서 HTML을 처리하는 것이다.
다음 코드는 흔히 볼 수 있는 단방향 연결을 보여 줍니다. 이 예는visible과 정반대입니다. 우리는 isVisible이 아닌 isHidden을 사용할 수 있습니다.
// invisible -> the inverse of 'visible'
ko.bindingHandlers['invisible'] = {
update: function (element, valueAccessor) {
var newValueAccessor = function () {
// just return the opposite of the visible flag!
return !ko.utils.unwrapObservable(valueAccessor());
};
return ko.bindingHandlers.visible.update(element, newValueAccessor);
}
};
다음 코드는 양방향 연결을 보여 줍니다. 이 예는 하나의 숫자에 대한 검증을 보여 줍니다. 요소에서 데이터를 가져와 ViewModel에 전달하고 ViewModel이 변할 때도DOM에 전달할 수 있습니다.
// simple number parsing
function parseNumber(strVal){
return parseInt(strVal, 10);
}
// very basic two-way binding handler
ko.bindingHandlers['number'] = {
init: function (element, valueAccessor, allBindingsAccessor) {
//handle the input changing
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
var number = parseNumber(element.value);
if (number !== NaN) {
observable(element.value);
}
});
},
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var number = parseNumber(value);
if (number !== NaN) {
element.setAttribute("value", number);
}
}
};
Summary
Knockout은 매우 성숙한 스크립트 라이브러리입니다. 이 부분에서 다음과 같은 내용을 배웠습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
knockout computed 실례텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.