BakboneJS라도 Binding Dom과 모델!
14604 단어 JavaScriptBackbone.js
BakboneJS라도 Binding Dom과 모델. JavaScript - Client Side - Advent Calendar 2013
http://qiita.com/advent-calendar/2013/javascript
12/3(火)分の記事です。
아이고
Backbone.js비 사용 jQuery 만 사용
웹 응용 프로그램의 소스 코드
잘 쓰죠?
"그래, 더 열심히 공부할게~"
요즘 AnglarJS가 인기가 많아서 질투가 나요.
Data Binding이 너무 부러워요...
Data-binding is an automatic way of updating the view whenever the model changes, as well as updating the model whenever the view changes.
http://angularjs.org/
그래서 백본.나는 js에서 데이터-binding 기능을 추가할 수 있는 프로그램 라이브러리를 찾았다.
derickbailey / backbone.modelbinding
https://github.com/derickbailey/backbone.modelbinding
Star★: 730
theironcook / Backbone.ModelBinder
https://github.com/theironcook/Backbone.ModelBinder
Star★: 1,145
mikeric / rivets
https://github.com/mikeric/rivets
Star★: 1,230
NYTimes / backbone.stickit
https://github.com/NYTimes/backbone.stickit
Star★: 815
...많네.
이번엔 백본이야.ModelBinder 사용
어떤 느낌이 편할까요? 사용하지 않는 상황과 비교해 보고 싶습니다.
예제 응용 프로그램 만들기
왼쪽 연락처 목록의 그림에서 비교하고 싶습니다.
일단 백본.ModelBinder를 사용하지 마십시오...
요약 생성:JavaScriptvar AddressListView = Backbone.View.extend({
// ... 省略 ....
createRender: function(){
this.addressList.each( this.createOneRender, this);
},
createOneRender: function( address){
var addressItemView = new AddressItemView({
address: address,
addressList: this.addressList
});
addressItemView.createRender();
this.$('.js-list').append(addressItemView.$el);
}
});
차트~가 나오면 createOne Render로 상세히 생성됩니다.
설명서: JavaScriptvar AddressItemView = Backbone.View.extend({
tagName: 'li',
initialize: function(options) {
this.address = options.address;
this.listenTo(this.address, 'change', this.updateRender);
}
createRender: function(){
this.$el.append('<div class="js-item-name item-name"></div>');
this.$el.append('<div class="js-item-kana item-kana"></div>');
this. this.updateRender();
},
updateRender: function(){
this.$('.js-item-name').text( this.address.get('name') + '様');
this.$('.js-item-kana').text( this.address.get('kana'));
return this.$el;
}
});
비교점은this다.address의change 이벤트 감시하기
업데이트 렌더로 업데이트된 곳입니다.
Backbone.ModelBinder 사용!
설명서: JavaScriptvar BinderAddressItemView = Backbone.View.extend({
tagName: 'li',
initialize: function(options) {
this.address = options.address;
this.addressList = options.addressList;
// Backbone.ModelBinderを使うぞ!
this.modelBinder = new Backbone.ModelBinder();
},
createRender: function(){
this.$el.append('<div class="js-item-name item-name"></div>');
this.$el.append('<div class="js-item-kana item-kana"></div>');
// DOMとModelのbind設定
// 左側 Modelの属性名
// 右側 DOMを探すセレクタ名、データ表示時のフォーマット
var bindings = {
name: {selector: '.js-item-name', converter: this.nameConverter},
kana: {selector: '.js-item-kana' }
};
// DOMとModelのbind開始!
this.modelBinder.bind(
this.address,
this.el,
bindings );
},
// 名称表示時のフォーマット
nameConverter: function(direction, value){
if ( direction ){ return (value + '様'); }
return value;
}
});
initialize에 있는 Backbone.ModelBinder 생성 추가this.modelBinder = new Backbone.ModelBinder();
백본은 createRender에서 생성된 DOM에 있습니다.ModelBinder#bind를 사용하여 Model을 연결합니다.this.modelBinder.bind(
this.address,
this.el,
bindings );
서식 묘사도 가능한 모습이다.
direction이 Model->View일 때, 정말로 들어갑니다.nameConverter: function(direction, value){
if ( direction ){ return (value + '様'); }
return value;
}
총결산
아, 저기, 차라리 소스가 길어졌다고??(^^;;
앞이 안 좋아요?이렇게 생각하다.
하지만 모델과View의 DataBinding이 있다면
나는 사람의 출처 기술 차이가 적어지는 것도 좋다고 생각한다!
Marionetto.js랑 같이 공부하고 싶은데.
샘플 출처
Reference
이 문제에 관하여(BakboneJS라도 Binding Dom과 모델!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gyomu_engineer/items/e3d50ff40e8578adc732
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
JavaScript - Client Side - Advent Calendar 2013
http://qiita.com/advent-calendar/2013/javascript
12/3(火)分の記事です。
var AddressListView = Backbone.View.extend({
// ... 省略 ....
createRender: function(){
this.addressList.each( this.createOneRender, this);
},
createOneRender: function( address){
var addressItemView = new AddressItemView({
address: address,
addressList: this.addressList
});
addressItemView.createRender();
this.$('.js-list').append(addressItemView.$el);
}
});
var AddressItemView = Backbone.View.extend({
tagName: 'li',
initialize: function(options) {
this.address = options.address;
this.listenTo(this.address, 'change', this.updateRender);
}
createRender: function(){
this.$el.append('<div class="js-item-name item-name"></div>');
this.$el.append('<div class="js-item-kana item-kana"></div>');
this. this.updateRender();
},
updateRender: function(){
this.$('.js-item-name').text( this.address.get('name') + '様');
this.$('.js-item-kana').text( this.address.get('kana'));
return this.$el;
}
});
var BinderAddressItemView = Backbone.View.extend({
tagName: 'li',
initialize: function(options) {
this.address = options.address;
this.addressList = options.addressList;
// Backbone.ModelBinderを使うぞ!
this.modelBinder = new Backbone.ModelBinder();
},
createRender: function(){
this.$el.append('<div class="js-item-name item-name"></div>');
this.$el.append('<div class="js-item-kana item-kana"></div>');
// DOMとModelのbind設定
// 左側 Modelの属性名
// 右側 DOMを探すセレクタ名、データ表示時のフォーマット
var bindings = {
name: {selector: '.js-item-name', converter: this.nameConverter},
kana: {selector: '.js-item-kana' }
};
// DOMとModelのbind開始!
this.modelBinder.bind(
this.address,
this.el,
bindings );
},
// 名称表示時のフォーマット
nameConverter: function(direction, value){
if ( direction ){ return (value + '様'); }
return value;
}
});
this.modelBinder = new Backbone.ModelBinder();
this.modelBinder.bind(
this.address,
this.el,
bindings );
nameConverter: function(direction, value){
if ( direction ){ return (value + '様'); }
return value;
}
Reference
이 문제에 관하여(BakboneJS라도 Binding Dom과 모델!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gyomu_engineer/items/e3d50ff40e8578adc732텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)