0

初めて backbone.js をいじっていますが、イベントを適切に発生させることができません。誰かが私が間違っていることを説明できますか?

とても有難い!

私のhtmlの一番下にロードされたapp.jsで:

var Discussion = Backbone.Model.extend({
    defaults: {
        id: null,
        title: 'New discussion'
    },
    urlRoot: '/api/discussion'
});

var DiscussionCollection = Backbone.Collection.extend({
    model: Discussion,
    url: '/api/discussion'
});

var DiscussionView = Backbone.View.extend({   
   events: {
        'click .btnCreateDiscussion': 'create',
        'keypress #discussion_title': 'create'
   },

   initialize: function(){
        //this.$el = $("#form_discussion");
        this.template = _.template( $('#discussion-template').html() );
   },

   render: function(){
        console.log("rendering");
        return this;    
   },

   create: function(){
        console.log('creating a new discussion')
   }
});

var discussionView = new DiscussionView({ el: $("#form_discussion"), model: Discussion });

html:

<form action="" id="form_discussion" method="post">

<label for="discussion_title">Discussion Title</label>
<input type="text" id="discussion_title" name="discussion_title" />

<input class="btnCreateDiscussion" type="button" value="Create Discussion">

  <script type="text/template" id="discussion-template">
    <h1><%= title %></h1>
  </script>
4

3 に答える 3

1

問題はjQueryでした。最新の 1.x リリースは機能しませんでしたが、最新の 2.x リリースを使用すると問題が修正されます。この場合に 2.x のみを使用する理由を誰かが説明できると便利でしょうか?

于 2013-06-11T14:47:13.507 に答える
1

正常に動作しているようです: http://jsfiddle.net/Jbahx/。(バックボーンとアンダースコアのバージョンを確認し、DOM が初期化されていることを確認してください)

あなたが間違っていることについて:

  • model: Discussionビューをインスタンス化するとき。クラスではなく、モデルのインスタンスをビューに与える必要があります。ビューにモデルを与える場合 (オプション)、それは通常、特定のインスタンスのデータを表現したいためです。
  • render メソッドが呼び出されることはありませんが、現時点では役に立たないため、それほど大きな問題ではありません。
  • this.template = _.template( $('#discussion-template').html() );initializeメソッドで。これを拡張時にビューのプロパティとして配置すると、ビューのプロトタイプに配置されます (ここではシングルトンのように見えても) template: _.template( $('#discussion-template').html() ),
于 2013-06-11T12:41:18.507 に答える
-1

まず、オーバーライドされたメソッドで Backbone.View.prototype.initialize を呼び出して、Backbone にイベント リスナーを初期化させる必要があります。

initialize: function(){
    //this.$el = $("#form_discussion");
    this.template = _.template( $('#discussion-template').html() );
    Backbone.View.prototype.initialize.call(this)
},

次に、初期化でビューをレンダリングします。これはベスト プラクティスではありません。この別のrenderメソッドに使用します。

于 2013-06-11T11:02:34.047 に答える