Knockout 바인딩 종류

Posted by 단순대왕 Knockout : 2014. 9. 11. 12:32

바인딩 종류

입력 양식 바인딩

checked - 체크 상태를 모델로 지정

value - 입력 양식의 값을 모델로 지정

enable - 모델의 값에 따라 enable 속성을 지정

disable - 모델의 값에 따라 disable 속성을 지정

<input type="checkbox" data-bind="checked :chk" />

<h4>Enable Value</h4>

<input type="text" data-bind="enable :chk" />

ko.applyBindings({

chk : ko.observable(false)

});

options - options 태그를 생성하는 데 사용

selectedOptions - 선택된 options 태그를 의미

<h1 data-bind="text:region"></h1>

<select data-bind="options:regions, selectedOptions:region"></select>

ko.applyBindings({

region: ko.observable('선택하세요.'),

regions: ko.observableArray(['강남점', '교대점', '선릉점', '신촌점', '홍대점', '종로점' ])

});


속성 바인딩

attr - HTML 태그에속성을 바인딩

<div data-bind="foreach:collection">

<h2><a data-bind="attr: { href:href }, text:name"></a></h2>

<p data-bind="text:description"></p>

</div>

ko.applyBindings({

collection: ko.observableArray([{

name: '구글',

href: 'http://google.co.kr',

description: 'Lorem ipsum dolor sit amet'

}, 

{

name: '페이스북',

href: 'http://www.facebook.co.kr',

description: 'Lorem ipsum dolor sit amet'

}])

});


스타일 바인딩

style - style 속성을 바인딩

css - class 속성을 바인딩

<div data-bind="foreach:products">

<div data-bind="style: { color: price < 1000 ? 'blue' : 'red' }">

<h2 data-bind="text:name"></h2>

<p data-bind="text:price + '원'"></p>

<p data-bind="text:description"></p>

</div>

</div>

    

<style>

.expensive {

color: white;

background: red;

}

</style>

<div data-bind="foreach:products">

<div data-bind="css: { expensive: 1000 < price  }">

<h2 data-bind="text:name"></h2>

<p data-bind="text:price + '원'"></p>

<p data-bind="text:description"></p>

</div>

</div>


조건 바인딩

if - 내부 태그를 참일 때 보이게 합니다.

ifnot - 내부 태그를 거짓일 때 보이게 합니다.

<div>

<span class="add-on">최소</span>

<input type="text" data-bind="value:limitMin" />

</div>

<div>

<span>최대</span>

<input type="text" data-bind="value:limitMax" />

</div>

<div data-bind="foreach:products">

<div data-bind="if: $parent.limitMin() < price && price < $parent.limitMax()">

<h2 data-bind="text:name"></h2>

<p data-bind="text:price + '원'"></p>

</div>

</div>

ko.applyBindings({

limitMin: ko.observable(Number.MIN_VALUE),

limitMax: ko.observable(Number.MAX_VALUE),

products: ko.observableArray([{name: '핫세븐', price: 800}, {name: '블루불', price: 2000}])

});


예)

<a href="/logout">Logout</a>

<ul data-bind="foreach:todos">

<li data-bind="style:{ opacity: completed() ? 0.3 : 1.0 }">

<input type="checkbox" 

data-bind=" checked:completed, event:{ change:$parent.checkChange }" />

// you can use $parent to refer to data from outside the foreach

<span data-bind="text:title"></span>

</li>

</ul>

<form>

<input type="text" data-bind="value:title" />

<button data-bind="click:add">Add</button>

</form>

<p><a data-bind="click:remove">Remove items</a></p>


$(document).ready(function () {

$.getJSON('/todos', function (results) {

var todos = ko.observableArray([]);

ko.utils.arrayForEach(results, function (item) {

todos.push({

_id: ko.observable(item._id),

title: ko.observable(item.title),

completed: ko.observable(item.completed)

});

});

ko.applyBindings({

title: ko.observable(''),

todos: todos,

add: function (self) { },

remove: function (self) { },

checkChange: function (self) { }

});

});

});

Knockout 라이브러리는 이벤트 리스너로 다음 매개변수를 전달합니다.

this.submit = function(self, event){ };

매개변수 self는 이벤트를 발생한 뷰모델 자체를 의미하고

매개변수 event는 이벤트 객체를 의미합니다.

jQuery라이브러리를 사용하면 event 객체로 jQuery 이벤트 객체가 전달되며, 사용하지 않으면

일반 이벤트 객체가 전달됩니다.


'Knockout' 카테고리의 다른 글

knockout - 바인딩  (0) 2014.09.05
knockout - 기본 객체  (0) 2014.09.05
MVVM 패턴  (0) 2014.09.05