'Knockout'에 해당되는 글 4건

  1. 2014.09.11 Knockout 바인딩 종류
  2. 2014.09.05 knockout - 바인딩
  3. 2014.09.05 knockout - 기본 객체
  4. 2014.09.05 MVVM 패턴

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
  

knockout - 바인딩

Posted by 단순대왕 Knockout : 2014. 9. 5. 11:48

바인딩

데이터를 뷰와 연결하는 것을 의미합니다.


모델 바인딩

예)

window.addEventListener('load', function(){

ko.applyBindings({

title: ko.observable('Students')

});

});

뷰에서 data-bind 속성으로 title 모델과 연결합니다. 

data-bind 속성은 "바인딩 형태:대상 이름" 형태로 사용합니다.

input 태그에는 value 형태로 모델 바인딩을 적용합니다.

<body>

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

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

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

</body>

[결과]

Students

Students

[Students]


정적 바인딩 또는 html 바인딩

<div data-bind="text:'<h1>Knockout.js</h1>'"></div>


컬렉션 바인딩

컬렉션 바인딩은 컬렉션과 뷰를 연결합니다.

예)

ko.applyBindings({

title: ko.observable(''),

students : ko.observableArray([

{ id: 1,    // 변경될 가능성이 있는 객체를 observable 객체로 생성; id 속성은 변경되지 않음.

name: observable(''),

score: observable('') }

,

{ ... }])

})


foreach 바인딩

예)

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

<table>

<tbody data-bind=" f oreach:students ">

<tr>

<td data-bind="text:id"></td>

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

<td><input type="number" data-bind="value:score"/></td>

</tr>

</tbody>

</table>


메소드 바인딩

window.addEventListener('load', function(){

function StudentsViewModel(){

this.title = 'Students';

this.students = ko.observableArray([{}, {}, ...]);

this.average = ko.computed(function(){

var students = this.students();

var output = 0;

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

output += Number(item.score());    // 자료형을 변경하여 계산

});

return output / stduents.length;

}, this);

}

});

ko.applyBindings(new StudentsViewModel());


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

<h2 Average: <span data-bind=" text:average "></span></h2>


이벤트 바인딩

이벤트 바인딩은 특정 태그에 이벤트를 연결하는 것입니다.

이벤트는 event 바인딩 형태를 사용합니다.

function StudentViewMode(){

this.title = 'Students';

this.students = ko.observableArray([ ... ]);

this.average = ko.computed(function(){ ... }, this);

this.submit = function(){

var input = document.querySelector('input');

var name = input.value;

this.students.push({

id: this.sutdents().length + 1,

name: ko.observable(name);

score: ko.observable(0.0);

});

input.value = '';    // 초기화

})

}

<form data-bind=" event:{submit:submit} ">

<input text="text" name="name" />

<input type="submit" value="ADD"/>

</form>

'Knockout' 카테고리의 다른 글

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

knockout - 기본 객체

Posted by 단순대왕 Knockout : 2014. 9. 5. 10:25

기본 객체

Observable 객체

Knockout 라이브러리는 모델을 Observable 객체라고 부릅니다. 모델의 변화를 계속 감시하므로 모델을

Observable 객체라고 부릅니다.

예) // 객체 생성 - ko.observable();

var name = ko.observable('imdsoho');    

name('HAPPY');

alert(name());

[결과] HAPPY


ObservableArray 객체

Knockout 라이브러리는 컬렉션을 ObservableArray 객체라고 부릅니다.

예) // 객체 생성 - ko.observableArray();

var people = ko.observableArray([    // 컬렉션 선언

{name: ko.observable(''),

region: ko.observable('')}

,{name: ko.observable(''),

region: ko.observable('')

}

]); 

people.push({                        // 데이터 추가

name: ko.observable(''),

region: ko.observable('')

});

alert( people() );                      // 데이터 조회 - 함수 형태로 실행해야 객체의 요소를 가져올 수 있음.

people.remove(people()[0]);    // 데이터 삭제


ko.utils.arrayForEach() 메소드

ObservableArray 객체는 ko.utils.arrayForEach() 메서드로 반복문을 적용합니다.

예)

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

console.log(item);

});


Knockout 라이브러리의 ObservableArray 객체도 일반 자바스크립트 배열이 아닙니다.

ko.toJS()ObservableArray 객체를 자바스크립트 배열로 변환합니다.

ko.toJSON()ObservableArray 객체를 JSON 형식으로 변환합니다.

예)

console.log(ko.toJS(people));

console.log(ko.toJSON(people));


ko.applyBindings() 

기본 객체는 ko.applyBindings() 메서드의 매개변수로 입력하면 뷰와 자동으로 동기화합니다.

예)

ko.applyBindings({

people: ko.observable([{},{}])

});

이렇게 뷰와 모델을 연결하면 자동으로 뷰와 뷰모델이 동기화되는 패턴이 MVVM 패턴입니다.

'Knockout' 카테고리의 다른 글

Knockout 바인딩 종류  (0) 2014.09.11
knockout - 바인딩  (0) 2014.09.05
MVVM 패턴  (0) 2014.09.05
  

MVVM 패턴

Posted by 단순대왕 Knockout : 2014. 9. 5. 10:23

MVVM (Model View ViewModel) 패턴은 마이크로소프트의 WPF(Windows Presentation Foundation)와

실버라이트 개발에서 고안된 패턴입니다.

MVVM 패턴은 MVC 패턴과 비슷하지만 "바인더 추상층" 객체가 추가되어 있습니다.

바인더 추상층은 우리가 만드는 부분이 아니라 라이브러리 개발자가 완성해서 배포하는 부분입니다.

따라서 뷰와 뷰모델 사이의 연관성이 줄어듭니다.


모델 (Model)

모델은 데이터와 관련된 모든 기능을 수행하는 객체입니다. MVC 패턴의 모델과 같은 기능입니다.

뷰 (View)

뷰는 화면과 관련된 모든 기능을 수행하는 객체입니다. MVC 패턴의 뷰와 비슷한 기능입니다.

뷰모델 (View Model)

뷰를 추상화한 객체로 모델에서 어떤 데이터를 처리하고 뷰에서 어떠한 방식으로 보여줄지를 결정합니다.

MVC 패턴의 컨트롤러와 비슷한 기능입니다.

바인더 추상층 (Binder)

추상화되어 있는 뷰모델을 뷰에 반영하는 역할을 합니다.

라이브러리 개발자가 완성한 부분입니다.

MVC 패턴의 뷰와 컨트롤러의 기능을 바인더 추상층이 모두 수행합니다.


'Knockout' 카테고리의 다른 글

Knockout 바인딩 종류  (0) 2014.09.11
knockout - 바인딩  (0) 2014.09.05
knockout - 기본 객체  (0) 2014.09.05
  
 «이전 1  다음»