1

BackboneJSビュー内でコンテキストを維持するためのより短くよりエレガントな方法はありますか?

    this.$el.find(this.itemViewContainer).sortable("destroy").sortable({
        connectWith:'.tasks',
        delay:140,
        revert:200,
        items:'li:not(.locked)',
        placeholder:'ui-state-highlight',
        start:_.bind(function (event, ui){this._sortStart(event, ui);}, this),
        receive:_.bind(function (event, ui){this._sortReceive(event, ui);}, this),
        stop:_.bind(function (event, ui){this._sortStop(event, ui);}, this)
    });

私は以下に言及しています:

  • イベント開始
  • でも受け取る
  • イベントを停止します

重要なのは、this、event、およびuiが内部ビューイベントに渡されることです。

4

1 に答える 1

3

_.bindAllを使用して、これをコールバックのビューにロックできます。

bindAll _.bindAll(object、[* methodNames])
methodNamesで指定されたオブジェクト上のいくつかのメソッドをバインドして、呼び出されるたびにそのオブジェクトのコンテキストで実行されるようにします。イベントハンドラーとして使用される関数をバインドするのに非常に便利です。そうしないと、かなり役に立たないこれで呼び出されます。methodNamesが指定されていない場合、オブジェクトのすべての関数プロパティがそれにバインドされます。

そして、あなたはそれをこのように使うことができます

var V = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, '_sortStart', '_sortReceive', '_sortStop');

        this.$el.sortable("destroy").sortable({
            items: 'li:not(.locked)',
            start: this._sortStart,
            receive: this._sortReceive,
            stop:this._sortStop
        });
    },

    _sortStart: function(event, ui) {
    },
    _sortReceive: function(event, ui) {
    },
    _sortStop: function(event, ui) {
    }
});

http://jsfiddle.net/nikoshr/wAAZ5/

于 2012-11-05T14:34:24.010 に答える