Eungene's Imaginations...

[Backbone.js] 중첩 View를 이용한 Table 출력 본문

Programming/Backbone.js

[Backbone.js] 중첩 View를 이용한 Table 출력

Eungene's 2015. 10. 7. 11:36
728x90
반응형

이 소스에서 무엇보다 중요한 것은, Table을 이용해서 Backbone의 강점을 끌어내는 것입니다.

저도 제대로 몰라서, 주위 분께 물어물어 이제서야 해결하네요...


이제 중요한건, colspan, rowspan을 이용해서, 셀 병합을 하는 부분과,
솔루션에 맞추어서 이런저런 구성을 View로 만들어 보고, 그에 맞는 출력을 해주는 부분만 남은 것 같습니다.

Javascript로 일일이 뿌려주는 일은 너무 노가다성 작업이 짙어서, 이번 기회에 좋은 스크립트를 알아가네요.

이 글을 보시는 모든 개발자 분들~ 즐거운 개발 되시길 기원 드리겠습니다.

<script>
    var bodyView = Backbone.View.extend({
        el: 'body',
        initialize: function () {
            console.log(this.$el);
        }
    });
 
    var tableView = Backbone.View.extend({
        tagName: 'table',
        className: 'table table-striped',
        initialize: function () {
            this.render();
        },
        render: function () {
            var THEADView = new theadView();
            this.$el.append(THEADView.$el);
 
            var TBODYView = new tbodyView();
            this.$el.append(TBODYView.$el);
        }
    });
 
    var theadView = Backbone.View.extend({
        tagName: 'thead',
        initialize: function () {
            this.render();
        },
        render: function () {
            var TRView = new trView({ model: { parent: this, count: 5 } });
            this.$el.append(TRView.$el);
        }
    });
 
    var tbodyView = Backbone.View.extend({
        tagName: 'tbody',
        initialize: function () {
            this.render();
        },
        render: function () {
            for (var i = 0; i < 3; i++) {
                var TRView = new trView({ model: { parent: this, count: 5 } });
                this.$el.append(TRView.$el);
            }
        }
    });
 
    var trView = Backbone.View.extend({
        tagName: 'tr',
        initialize: function () {
            this.render();
        },
        render: function () {
            for (var i = 0; i < this.model.count; i++) {
                var item = null;
 
                switch (this.model.parent.tagName) {
                    case 'tbody':
                        item = new tdView();
                        break;
                    case 'thead':
                        item = new thView();
                        break;
                }
 
                if (item != null) {
                    this.$el.append(item.$el);
                }
            }
        }
    });
 
    var thView = Backbone.View.extend({
        tagName: 'th',
        initialize: function () {
            this.render();
        },
        render: function () {
            this.$el.text('헤드');
        }
    });
 
    var tdView = Backbone.View.extend({
        tagName: 'td',
        initialize: function () {
            this.render();
        },
        render: function () {
            this.$el.text('asdfefef');
        }
    });
    
    $.bodyView = new bodyView();
    $.bodyView.$el.append(new tableView().$el);
</script>


반응형
Comments