Skip to content

Instantly share code, notes, and snippets.

@dogrunjp
Last active March 10, 2016 12:10
Show Gist options
  • Save dogrunjp/0bf3d7b408702595be68 to your computer and use it in GitHub Desktop.
Save dogrunjp/0bf3d7b408702595be68 to your computer and use it in GitHub Desktop.
express + Backbone.jsでクライアント側で非同期にデータを描画する際の設定に苦労したのでメモしておきます。

Backbone.jsのテンプレートを外部ファイルから読み込んだ際のviewの記述

express + Backbone.jsでクライアント側で動的にデータを描画する際のテンプレートの設定に苦労したのでメモしておきます。

謎なところは結構たくさんあるのだけど、 以下の点が最もわかり難かった箇所。

  • node.jsが先にejsをレンダリングしようとするので、クライアントサイドのテンプレートは動的に読み込む
  • underscore.jsのテンプレートへの引数の渡し方の作法が?
  • render:の関数でthis.templateの引数は(ハッシュでも良いけど実用的には)モデルオブジェクトをtoJSON()して渡すと何となく上手く描画した

しかし、バージョン変わったらこの辺りの作法も変わりそう。。。。

   $.get("./view/error_message.ejs", function(list_tmpl){
        var DogView = Backbone.View.extend({

            initialize: function () {
                 _.bindAll(this, "render");
                this.render();
            },
            model: dog,
            template:_.template(list_tmpl),
            events: {
                'click #search_button': 'onClick'
            },
            onClick: function(e){
                alert($("#input_name").val())
            },
            render: function(){
                this.$el.html(this.template(this.model.toJSON()));
            }
        });
        var dog_view = new DogView({el: $("#container")});
    });

underscore.jsのテンプレートは普通にこんな感じ。モデルでname要素が指定されています。

<label><%= name %></label>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment