Backbone.js 데이터 동기화

Posted by 단순대왕 Backbone.js : 2014. 9. 3. 16:39

Backbone.Model 객체는 서버와 데이터를 동기화하는 기능이 있습니다.


Backbone.Model 객체 동기화

객체를 동기화 하려면 자원의 기본 구조를 파악하고 urlRoot 속성과 idAttribute 속성을 부여해야 한다.

fetch() - 서버에서 데이터를 가져옵니다.

save() - 서버에 데이터를 저장합니다.

destroy() - 서버에서 데이터를 제거합니다.

예)

var Book = Backbone.Model.extend({

urlRoot: '/books',

idAttribute: '_id'

});

var book = new Book({_id: '1'});

book.fetch({    // Model.fetch()

success: function(){

alert(JSON.stringify(book.toJSON(), null, 2);

}

});

RESTful 웹 서비스는 데이터를 추가할 때 Collection 경로로 데이터 추가를 요청합니다.

따라서 Backbone.Model 객체는 POST 요청을 하는 기능이 없습니다.


Backbone.Collection 객체 동기화

Backbone.Collection 객체로 통신하면 Backbone.Model 객체에 urlRoot 속성을 입력하지 않아도 됩니다.

Backbone.Collection 객체에 url 속성을 입력합니다.

예)

var Book = Backbone.Model.extend({

idAttribute: '_id'

});

var Books = Backbone.Collection.extend({

url: '/books'

});

var books = new Books();

books.fetch({

success: function(){

}

})

fetch() - 서버에서 데이터를 가져옵니다.

create() - 서버에 데이터를 생성합니다.


Backbone.Collection.fetch() 메서드로 데이터를 불러오면 reset 이벤트를 실행합니다.

예)

var books = new Books()

books.bind('reset', function(){

// fetch() 실행 -> reset 이벤트 발생 -> 먼저 출력된다. (실행된다?)

});

books.fetch({

// reset 이벤트 발생시킨다 -> 이벤트 발생 후, 내용이 나중에 출력된다. (실행된다?)

})


예제 코드 구성)

// Template 구성

<script id="login-template" type="text/template">

</script>

<script id="register-template" type="text/template">

</template>

<script id="main-template" type="text/template">

</script>

<script id="item-template" type="text/template">

</script>

// Model 구성

var User = Backbone.Model.extend({ 

...

me: function (successFunc, errorFunc) {

$.ajax(this.urlRoot + '/me', {

type: 'GET',

success: function (a, b, c) { successFunc(a, b, c); },

error: function (a, b, c) { errorFunc(a, b, c); }

});

},

...

});

var ToDo = Backbone.Model.extend({ });

// Collection 구성

var ToDos = Backbone.Collection.extend({ });

// View 구성

var RegisterView = Backbone.View.extend({ });

var LoginView = Backbone.View.extend({

...

// 로그인

new User({

login: this.$('#login').val(),

            password: this.$('#password').val()

})

.login(

function () {                

this.undelegateEvents();

this.$el.removeData().unbind();

location.hash = 'main';

}.bind (this), /* login() 가 실행되는 new User() - [ this ] contenxt  */

/* on => object.on(event, callback, [ context ]) Alias: bind */

function () {

$('#login').val('');

$('#password').val('');

alert('로그인에 실패했습니다.');

}

);

// 기본 이벤트 제거

event.preventDefault();

...

});

var MainView = Backbone.View.extend({ });

var ItemView = Backbone.View.extend({ });

// Router 구성

var RootRouter = Backbone.Router.extend({ 

...

main: function () {

/* User.me() - function (successFunc, errorFunc) { }*/

new User().me(

function () {

new MainView();

}, 

function () {

location.hash = 'login';

}

);

}

...

});

// Application 시작

var router = new RootRouter();

Backbone.history.start();

location.hash = "main";

'Backbone.js' 카테고리의 다른 글

Backbone.Router - 라우트/ 상속  (0) 2014.09.03
Backbone.View - 선택/ 제거  (0) 2014.09.03
Backbone.View - 템플릿/ 이벤트  (0) 2014.09.02
Backbone.View - 상속  (0) 2014.09.02
Backbone.Collection  (0) 2014.09.02
  

Backbone.Router - 라우트/ 상속

Posted by 단순대왕 Backbone.js : 2014. 9. 3. 16:08

Backbone.Router

URL을 관리하는 객체

- 모델에서 이벤트가 발생하면 뷰를 변경하는 역할

- 뷰에서 이벤트가 발생하면 모델을 변경하는 역할

- 모든 잡다한 처리를 수행하는 역할


정적 라우트 - 고정된 경로로 라우트합니다.

http://www.h5homom.com/theme

http://www.h5homom.com/category

예)

var router = new Backbone.Router({

routes:{

'': 'onNothing',

'blue':'onBlue'

}

});

router.bind('route:onNothing', function(){ });

router.bind('route:onBlue', function(){ });

// Backbone.Router 객체에 routes 속성이 없으면 Backbone.history.start() 메서드를 사용할 수 없음

Backbone.history.start();


동적 라우트- 고정되지 않은 경로로 라우트 합니다.

동적 라우트는 URL의 일부를 변경될 수 있는 값으로 설정하는 기능입니다.

http://www.h5homom.com/:사용자/:파일

http://www.h5homom.com/entry/jk/:아이디

예)

var router = new Backbone.Router({

routes:{

'color/:background': 'onColor',

'title/:first-:second':'onTitle'

}

});

router.bind('route:onColor', function(background){

$('body').css('background', background);

});

router.bind('route:onTitle', function(first, second){

$('#title').text(first + "+" + second);

});

<h1>Router <span id="title">0 +0 </span></h1>

<a href="#color/white" class="btn">White</a>

<a href="#color/blue" class="btn">Blue</a>


<a href="#title/0-0" class="btn">00</a>

<a href="#title/0-1" class="btn">01</a>


상속

var Router = new Backbone.Router.extend({

routes:{

'': 'onNothing',

'red': 'onRed',

'blue':'onBlue'

},

onRed: function(){

},

onBlue: function(){

}

});

var router = new Router();

Backbone.history.start();

'Backbone.js' 카테고리의 다른 글

Backbone.js 데이터 동기화  (0) 2014.09.03
Backbone.View - 선택/ 제거  (0) 2014.09.03
Backbone.View - 템플릿/ 이벤트  (0) 2014.09.02
Backbone.View - 상속  (0) 2014.09.02
Backbone.Collection  (0) 2014.09.02
  

Backbone.View - 선택/ 제거

Posted by 단순대왕 Backbone.js : 2014. 9. 3. 14:54

선택

el - Backbone.View 객체의 문서 객체 모델을 나타냅니다.

예)

var ArticleView = Backbone.View.extend({

el: '#content',

template: _.template($('#template').html()),

events:{

'click h1': function(){

this.$('h1').append('+');

}

},

render: function(){

this.$el.html(this.template(this.model.toJSON()));

// this.model 값이 없지만 오류 없음 -> (1) model 을 사용

// model 이 아닌 다른 이름(mmm)의 attribute를 사용하면 찾지 못함 - this.mmm => undefined

// 아래 mmm 이름의 attribute를 사용하면 오류 없음 this.mmm

}

, mmmnew Backbone.Model({title: 'Backbone.js'})

});

var view = new ArticleView({

(1) model : new Backbone.Model({title: 'Backbone.js'})

});

view.render(();

이미 존재하는 객체를 선택해서 사용할 때는 tagName, className, attributes 속성을 사용할 수 없음


제거

Backbone.View 객체가 만든 문서 객체를 지워도 자신이 사라진지 모릅니다.

뷰를 완전히 제거할 때는 remove() 메서드를 사용합니다.

예)

view.remove();


'Backbone.js' 카테고리의 다른 글

Backbone.js 데이터 동기화  (0) 2014.09.03
Backbone.Router - 라우트/ 상속  (0) 2014.09.03
Backbone.View - 템플릿/ 이벤트  (0) 2014.09.02
Backbone.View - 상속  (0) 2014.09.02
Backbone.Collection  (0) 2014.09.02
  

Backbone.View - 템플릿/ 이벤트

Posted by 단순대왕 Backbone.js : 2014. 9. 2. 11:22

템플릿

Backbone.js는 underscore.js 라이브러리로 템플릿을 생성합니다.

템플릿은 Backbone.View 객체의 template 속성을 사용합니다.

template - 뷰의 템플릿을 지정합니다. = view.template([data]) 

예)

<script id="template" type="text/template">

<h1><%= title %></h1>

</script>

var ArticleView = Backbone.View.extend({

tagName: 'section',

template: _.template($('#template').html()),

render: function(){

this.$el.html(this.template(this.model.toJSON()));

return this;

}

)};

var view = new ArticleView({

model: new Backbone.Model({

title: 'Backbone.js'

})

});

view.render().$el.appendTo('body');

또는 Backbone.View 컨트롤러 역할 => initalize() 사용

// Backbone.View 생성자 함수를 상속합니다.

var ArticleView = Backbone.View.extend({

tagName: 'section',

template: _.template($('#template').html()),

initialize: function () {

this.model = new Backbone.Model({

title: 'Backbone.js'

});

this.render();

},

render: function () {

this.$el.html(this.template(this.model.toJSON())).appendTo('body');

}

});

// ArticleView 객체를 생성합니다.

new ArticleView();


이벤트

event - 뷰의 이벤트를 지정합니다.

extend() 메서드의 매개변수에 events 속성을 입력한다.

events 객체에는 '이벤트 선택자' 형태로 키를 입력하고 이벤트 리스너를 값으로 입력한다.

예)

var ArticleView = Backbone.View.extend({

tagName: 'section',

template: _.template($('#template').html()),

events:{
    'click h1': function(){

this.$('h1').append('+');

}

},

render: function(){

this.$el.html(this.template(this.model.toJSON()));

return this;

}

});

또는

events:{

'click h1': 'onHeaderClick'

},

render: function(){

this.$el.html(this.template(this.model.toJSON()));

},

onHeaderClick: function(){   

this.$('h1').append('+');

}

'Backbone.js' 카테고리의 다른 글

Backbone.Router - 라우트/ 상속  (0) 2014.09.03
Backbone.View - 선택/ 제거  (0) 2014.09.03
Backbone.View - 상속  (0) 2014.09.02
Backbone.Collection  (0) 2014.09.02
Backbone.Model 객체  (0) 2014.09.01
  

Backbone.View - 상속

Posted by 단순대왕 Backbone.js : 2014. 9. 2. 11:04

Backbone.View

// 뷰의 역할

- 컨트롤러를 통해 입력받은 모델을 화면에 출력하는 역할

- 사용자 이벤트를 처리하는 역할

// 컨트롤러의 역할

- 모델에서 이벤트가 발생하면 뷰를 변경하는 역할

- 뷰에서 이벤트가 발생하면 모델을 변경하는 역할

- 모든 잡다한 처리를 수행하는 역할

Backbone.View 객체가 뷰와 컨트롤러의 기능을 담당합니다.


상속

뷰는 반드시 상속해서 사용합니다. Backbone.View 생성자 함수를 상속해서 ArticleView 생성자 함수를 

만듭니다.

var ArticleView = Backbone.View.extend({ });


객체 속성

el - Backbone.View 객체의 문서 객체 모델을 나타냅니다.

$ - jQuery 함수를 나타냅니다.

$el - $(el)를 나타냅니다.

render() - 화면에 뷰를 출력합니다.

tagName - 태그 이름

className - 클래스 속성

attribute - 일반 속성

예)

// Backbone.View 생성자 함수

var ArticleView = Backbone.View.extend();    

// ArticleView 객체를 생성

var view = new ArticleView();

// 화면에 출력 - view는 기본적으로<div> 태그를 출력

view.render().$el.appendTo('body');

예)

var ArticleView = Backbone.View.extend({

tagName: 'section',

className: 'container content',

attribute:{

'data-index': 0

},

initialize: function(){    // 상속할 때 initialize() 메소드를 사용할 수 있음

this.render();

},

render: function(){

this.$el.html('<h1>Backbone.js</h1>');

return this;

}

});

결과)

<section data-index="0" class="container content">

<h1>Backbone.js</h1>

</section>


'Backbone.js' 카테고리의 다른 글

Backbone.Router - 라우트/ 상속  (0) 2014.09.03
Backbone.View - 선택/ 제거  (0) 2014.09.03
Backbone.View - 템플릿/ 이벤트  (0) 2014.09.02
Backbone.Collection  (0) 2014.09.02
Backbone.Model 객체  (0) 2014.09.01
  

Backbone.Collection

Posted by 단순대왕 Backbone.js : 2014. 9. 2. 10:59

Backbone.Collection

Backbone.Model 객체를 모아놓은 배열을 Backbone.Collection 객체라고 합니다.

(Backbone.Model의 역할과 동일)

- 데이터를 표현하는 역할

- 데이터의 변경을 감시하는 역할

- 데이터를 데이터 저장소와 동기화하는 역할 


생성

var collection = new Backbone.Collection();

collection.add({name: 'AAA'});

collection.add({name: 'BBB'});

자바스크립트 객체를 add() 메소드의 매개변수로 넣었지만 Backbone.Model 객체로 변경

Backbone.Collection 객체는 Underscore.js 라이브러리의 배열 관련 매소드(collection, arrays)를 활용


이벤트

add - 객체를 추가할 때 발생

remove - 객체를 제거할 때 발생

reset - 초기화할 때 발생

collection.bind('add', function(item){ });

collection.bind('remove', function(item){ });

collection.bid('reset', function(){ });


변환

Backbone.Collection 객체도 일반적인 자바스크립트 배열이 아닙니다.

따라서 toJSON() 매서드를 사용하여 일반적인 배열로 변환합니다. (Backbone.Model과 동일)

console.log(collection.toJSON());


상속

Backbone.Collection 생성자 함수도 상속해서 사용할 수 있습니다.

var Person = Backbone.Model.extend({ });        // Model 상속

var People = Backbone.Collection.extend({ });  // Collection 상속




'Backbone.js' 카테고리의 다른 글

Backbone.Router - 라우트/ 상속  (0) 2014.09.03
Backbone.View - 선택/ 제거  (0) 2014.09.03
Backbone.View - 템플릿/ 이벤트  (0) 2014.09.02
Backbone.View - 상속  (0) 2014.09.02
Backbone.Model 객체  (0) 2014.09.01
  

Backbone.Model 객체

Posted by 단순대왕 Backbone.js : 2014. 9. 1. 17:35

Backbone Mode 

-  데이터를 표현

- 데이터의 변경을 감시

- 데이터를 데이터 저장소와 동기화 하는 역할

Backbone.Model 객체는 일반적인 자바스크립트 객체가 아닙니다.

Backbone.Model 객체를 일반 자바스크립트 객체로 변환하려면 toJSON() 메소드를 사용합니다.


이벤트

change - Backbone.Model 객체의 속성이 변경될 때 발생합니다.

change:[속성 이름]Backbone.Model 객체의 특정 속성이 변경될 때 발생합니다.

destroyBackbone.Model 객체가 삭제될 때 발생합니다.

예)

<script>

// Backbone.Model 객체를 생성

var person = new Backbone.Model({

name: '김태희',

region: '서울'

});

console.log(person.toJSON()); // 자바스크립트 객체로 변환

person.bind('change:region', function(model, attr){

//person.bind('change', function(){}); - 모든 속성의 변경 감지

alert(attr + ' [속성 변경]');

});

// 속성을 추출

person.get('name');

// 속성을 입력

person.set('region', '서울 특별시 강남구');

</script>


상속

자체적으로 지원하는 모든 생성자 함수의 상속을 지원한다.

상속을 사용하면 초기값을 설정하거나 객체 생성할 때 특정한 코드를 실행할 수 있다.

defaults - 객체가 기본적으로 가지는 속성을 정의

initialize() - 객체를 생성하는 시점에 생성되는 매소드

예)

var Person = Backbone.Model.extend({

defaults: {

name: '',

region: ''

},

initialize: function(){

this.bind('change:name', this.changName);

this.bind('change:region', this.changeRegion);

},

changeName: function(){ },

changeRegion: function(){ }

});


'Backbone.js' 카테고리의 다른 글

Backbone.Router - 라우트/ 상속  (0) 2014.09.03
Backbone.View - 선택/ 제거  (0) 2014.09.03
Backbone.View - 템플릿/ 이벤트  (0) 2014.09.02
Backbone.View - 상속  (0) 2014.09.02
Backbone.Collection  (0) 2014.09.02
  
 «이전 1  다음»