0

バックボーン.jsチュートリアルhttp://arturadib.com/hello-backbonejs/docs/5.htmlを読んでいる初心者のJavaScriptの人のようなもので、作成者が使用しているコードのいくつかについていくつか質問があります。

以下の初期化関数では、作成者がバインドします

  this.model.bind('change', this.render);
  this.model.bind('remove', this.unrender);

これはrender、change関数が呼び出されるたびに関数が「this」オブジェクトで呼び出され、呼び出されるunrenderたびに実行されることを意味すると思いますremove。私にとっての問題は、'remove'彼のコードには定義された関数がありますが、定義された関数がないことです。'change'

質問: jquery関数changeremove参照してください。または、関数がjquery関数を参照しているときに、コードで定義されremoveている関数を参照していますかremove(つまり、jquery関数をオーバーライドします)change。後者の場合、'change'明示的に呼び出されることがなく、したがって関数が呼び出されない場合、関数を正確にトリガーするものは何renderですか?

コード

var ItemView = Backbone.View.extend({
    tagName: 'li', // name of tag to be created        


    events: { 
      'click span.swap':  'swap',
      'click span.delete': 'remove'
    },    


    initialize: function(){
      _.bindAll(this, 'render', 'unrender', 'swap', 'remove'); // every function that uses 'this' as the current object should be in here

      this.model.bind('change', this.render);
      this.model.bind('remove', this.unrender);
    },


    render: function(){
      $(this.el).html('<span style="color:black;">'+this.model.get('part1')+' '+this.model.get('part2')+'</span> &nbsp; &nbsp; <span class="swap" style="font-family:sans-serif; color:blue; cursor:pointer;">[swap]</span> <span class="delete" style="cursor:pointer; color:red; font-family:sans-serif;">[delete]</span>');
      return this; // for chainable calls, like .render().el
    },


    unrender: function(){
      $(this.el).remove();
    },


    swap: function(){
      var swapped = {
        part1: this.model.get('part2'), 
        part2: this.model.get('part1')
      };
      this.model.set(swapped);
    },



    remove: function(){
      this.model.destroy();
    }
  });

</ p>

4

1 に答える 1

2

およびはバックボーンイベントでchangeありremove、jQueryイベントではありません。これらは:

this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);

これは、モデルがイベントをトリガーしたときに呼び出され、モデルがイベントをthis.renderトリガーしたときに呼び出されることを意味します。モデルの方法:changethis.unrenderremoveset

セットする model.set(attributes, [options])

モデルに属性のハッシュ(1つまたは複数)を設定します。いずれかの属性がモデルの状態を変更すると、オプションとして渡され"change"ない限り、イベントがトリガーされます。{silent: true}

モデルのchangeイベントをトリガーする1つの方法でunsetあり、イベントclearもトリガーchangeします。

removeイベントは通常コレクションから発生しますが、視聴しているビューがある場合に備えて、コレクションは適切なモデルを介してイベントを送信します。

(非常に優れた)バックボーンのドキュメントを読み、特にイベントのカタログを確認することをお勧めします。

于 2012-04-11T04:01:48.860 に答える