如何只调用一次骨干视图事件?

YPC*_*ble 8 javascript backbone.js backbone-views

我有一个骨干视图,看起来像这样:

var myView = Backbone.view.extend({
    events: {'click .myClass': 'myFunction'},
    initialze: //initialize function,
    render: //render function,
    myFunction: function (e) {
        //do something
    }
});
Run Code Online (Sandbox Code Playgroud)

我想myFunction只做一次工作,然后停止被叫.我相信我可以使用主干once()方法来实现这一点,但无法弄明白.这是最好的方式,我该如何构建它?谢谢!

Gre*_*reg 13

只需替换您当前的定义:

myFunction: function(){....}

通过

myFunction: _.once(function(){....})

可以多次调用myFunction,但在第一次调用后它将是一个noop.


mu *_*ort 5

视图事件绑定使用,delegateEvents并使用jQuery的委托形式on.这意味着事件到处理程序映射是动态的,可以通过操作DOM来操作.例如,您可以这样做:

Backbone.View.extend({
    events: {
        'click .myClass.onlyOnce': 'doThings'
    },
    doThings: function(e) {
        $(e.currentTarget).removeClass('onlyOnce');
        //...
    },
    //...
});
Run Code Online (Sandbox Code Playgroud)

并确保该.myClass元素也有一个onlyOnce类.然后,当您第一次单击它时,它将匹配.myClass.onlyOnce,并且点击将被路由到doThings; doThings然后继续删除onlyOnce课程并做任何需要做的事情.随后点击.myClass将点击匹配的内容,.myClass.onlyOnce因此doThings不会再次调用.

这种方法具有自我记录其行为的好处events.

演示:http://jsfiddle.net/ambiguous/7KJgT/