Backbone.js의 개발 환경을 구축하고 MVC 모드로 써봤어요.

지금까지 저는 개인적으로 AnglarJS, Knockout이라고 생각합니다.js、Vue.나는 또 다른 여러 가지 방법을 시도해 보았지만 Backbone.js 아직 완전히 접하지 못했기 때문에 시도해 보았다.
이번에는 Yeoman의backbone 발생기를 이용했다.생성기를 사용하는 이유로는 처음이기 때문에 가장 좋은 실천 구성을 먼저 알고 싶고, 커피스크립트로 쓰기 위한 환경을 위해 간단하게 만들려고 한다.
Yeoman의 생성기를 이용하면 Grunt/Bower 주변 환경이 어느 정도 통일돼 있어 가볍다.

환경 구조


전제 조건

  • 휴대용 OS: Mac OS X 10.9.5 (Mavericks)
  • Yeoman, Grunt, Bower를 사용합니다.만약 아직 설치하지 않았다면 이곳의 투고 설치를 참고하세요.
  • Mac로 Yeoman 환경을 구축하려면

  • bacbone 생성기를 설치하지 않은 경우 다음과 같이 설치합니다.
    $ npm install -g generator-backbone
    

  • 그 결과 이번에 이용된 공구/고군의 상세한 버전은 다음과 같다.
  • Yeoman: 1.3.3
  • Yeoman의 gener-backbone: 0.3.3
  • Backbone.js: 1.1.2
  • JQuery: 2.1.1 .. Backbone.js 의존
  • Lo-Dash: 2.4.1 .. Backbone.js 의존
  • 절차.


  • 생성기를 시작합니다.
    $ yo backbone
    

    이번에는 CoffScript만 선택했습니다.

  • 초기 형태 생성이 완료되면 JavaScript 라이브러리 클래스가 포함되지 않으므로 Bower를 사용하여 설치합니다.
    $ bower install
    

  • 파일이 다음과 같이 확장되었습니다.


  • 여기서 동작을 확인하세요.
    $ grunt serve
    

  • Backbone.js로 써주세요.


    Backbone.js의 주요 구성 요소는 ModelCollectionViewRouterModel이다.이 Yeoman 환경에서는 각각 다음 생성 명령이 준비되어 있습니다.
    $ yo backbone:model hoge
    $ yo backbone:collection hoge
    $ yo backbone:view hoge
    $ yo backbone:router hoge
    
    또한 백본 생성기의 설명은 GiitHub을 통해 확인할 수 있다.
    https://github.com/yeoman/generator-backbone
    이번에는 최소한ViewModel만 사용한다.
    $ yo backbone:model hoge_model
    $ yo backbone:view hoge_view
    
    그리고 아래Viewname의 모형을 생성한다.

    지금부터 소스를 쓰겠습니다.결과적으로 나는 이렇게 간단한 물건을 만들 수 있을 것이다.

    Backbone.js의 사상?사용자 입력은 컨트롤러를 통해 모델에 반영되고 보기는 모델의 변경을 감지하며 자신의 디스플레이 내용을 변경합니다.
    이번 소스는 기릿허브에도 있어요.
    https://github.com/hkusu/Backbone.js_demo

    모델 생성


    기본적으로 모두 초기 모양입니다. 이번에 처리된 두 개의 값 age View 의 기본값 (비어 있음) 을 설정합니다.
    app/scripts/models/hoge_model.coffee
    'use strict';
    
    class BackboneTest.Models.HogeModel extends Backbone.Model
      url: ''
    
      initialize: () ->
    
      defaults:
        name: ""
        age: ""
    
      validate: (attrs, options) ->
    
      parse: (response, options) ->
        response
    
    

    View 및 템플릿 생성


    번거롭지만 백본.js에서 말한 <$= ほげほげ %>는 다른 프레임워크의 컨트롤러입니다.
    먼저 템플릿부터 시작합니다.표시 부분은 input 로 변수를 기록합니다.입력 부분은 jQueryView에서 탭을 주우기 때문에 원본 파일에서는 아무것도 하지 않지만 id와class를 지정하는 것이 좋습니다.
    app/scripts/templates/hoge_view.ejs
    <p>
      名前:<%= name %>
    </p>
    <p>
      年齢:<%= age %>
    </p>
    
    <hr>
    
    <p>
      新しい年齢:<input type="text" />
      <br>
      <font size="1px" color="orange">
        Model へ反映  自動的に View へ反映されるデモです。<br>
        ただリアルタイムデータバインドが聞いてないのでカーソル外してください..</font>
    </p>
    
    다음에 쓰기 event (다른 프레임의 컨트롤러).추가 방법은 input에서 라벨을 줍는 변경(=컨트롤러의 역할)과 inputCange 방법이다.
    주의해야 할 것은
  • inputCange 메서드가 Model을 업데이트했습니다.
  • listenTo에서 모델의 변경을 감시하고 변경이 있을 때 다시 묘사한다.
  • app/scripts/views/hoge_view.coffee
    'use strict';
    
    class BackboneTest.Views.HogeView extends Backbone.View
    
      template: JST['app/scripts/templates/hoge_view.ejs']
    
      tagName: 'div'
    
      id: ''
    
      className: ''
    
      events:
        "change input": "inputCange"
    
      inputCange: () ->
          @model.set("age", @$("input").val())
    
      initialize: () ->
        @listenTo @model, 'change', @render
    
      render: () ->
        @$el.html @template(@model.toJSON())
    

    전체 국면을 통합하다.


    브라우저에 View를 표시하기 위해 index.html에 div 태그를 추가했습니다.
    app/index.html
    <div id="hoge"></div>
    마지막main.coffee
  • 인스턴스 모델 및 View
  • View 삽입index.html
  • View-Model 링크
  • 만들다
    app/scripts/main.coffee
    window.BackboneTest =
      Models: {}
      Collections: {}
      Views: {}
      Routers: {}
      init: ->
        'use strict'
    
        model = new @Models.HogeModel(
            name: "山田 太郎"
            age: 31
        )
    
        view = new @Views.HogeView(
          el: $("#hoge")
          model: model
        )
    
        view.render()
    
        return
    
    $ ->
      'use strict'
      BackboneTest.init();
    
    시위행진은 여기에 뒀다(GiitHub Pages).
    http://hkusu.github.io/Backbone.js_demo/dist/

    맺음말(Backbone.js에 대한 소감)


    전에 들어봤지만 한 가지를 이루기 위해서는 다양한 곳에서 기술할 필요가 있다고 생각했고, 다른 한편으로는 틀에 얽매여 있어서 실현 방법이 통일되지 않았다.
    그리고 모델이 잘 썼다고 생각해요.서버 측과의 모델 협업 & 데이터 구조 정의를 명확히 하는 시스템.
    뷰 주위가 단일체라면 약할 것 같은데(jQuery를 직접 만지작거리는 기분) 다른 프로그램 라이브러리와 조합해서 사용하면Marionette.js 없앨 수 있을 것 같아요.

    좋은 웹페이지 즐겨찾기