javascript - Backbone.js开发中如何将初始化的事件绑定到this.$el中?
PHP中文网
PHP中文网 2017-04-10 16:48:11
[JavaScript讨论组]
events: {
    "click span.cpm-right": "collect",
},
initialize: function (attrs) {
    this.tabs();//但是我想把这个操作绑定到$el中
},
tabs:function() {//当页面载入时,这个执行
    $('.cpm-tabs li').each(function(index){
        if($(this).hasClass('on')){
            $('.tabs').hide();
            $('.tabs:eq('+index+')').show();
        }
    })
    $('.cpm-tabs li').on('click',function(){
        var index=$(this).index();
        $('.tabs').hide();
        $(this).addClass('on').siblings('li').removeClass('on');
        $('.tabs:eq('+index+')').show();
    })
},

但是我想把这个操作tabs()绑定到$el中;(可能是干扰了大家,实际想问的的代码如下:)

events: {
    "click span.cpm-right": "collect",
},
broadcast:function(){
//存在问题:浏览器返回再进来,定时器累加,轮播就乱了
    //就是想把他绑定在body里,然后$('body').off()
    $(".cpm-broadcast li:eq(0)").clone(true).appendTo($(".cpm-broadcast"));
    var liHeight = $(".cpm-swiper").outerHeight();
    var index = 0;
    function next() {
        index++;
        $(".cpm-broadcast").animate({
            top: -index * liHeight
        },400,function(){
            if(index == $(".cpm-broadcast li").length -1) {
                $(".cpm-broadcast").css({top:0});
                index = 0;
            }
        })
        console.log('autoTimer')
    }
    //自动轮播
    this.autoTimer = setInterval(next,3000);
},
render: function (e) {
    this.$el.html(this.template(this.model.toJSON()));
    this.broadcast();//这里怎么绑定
    return this;
},

浏览器返回再进来,定时器累加,轮播就乱了,就是想把他绑定在body里,然后$('body').off(),不知道怎么实现比较好

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
黄舟

激动,好久没看到关于 Backbone 的提问了。View 拥有一个 events 属性,就如楼主的 events 一样,会在 View 初始化的时候自动委托 el 元素绑定各种事件。比如楼主的 events 实际上可以转换为如下的代码:

//    为了说明方便把 `events` 的事件写在 `initialize` 中
initialize: function() {
    
    //    events 的行为会为处理方法绑定 `this` 指针为当前的 View
    //    并为传入的 `event` 增加一个 `currentTarget` 作为本应指向
    //    被单击的元素。
    this.$el.on('click', 'span.cpm-right', collect.bind(this));
}

更详细的,可以查看 Backbone#View

按楼主的问题,可以把 tabs() 写入 events 中,大概更新后的源码应该如下

events: {
    'click span.cpm-right': 'collect',
    'click .cpm-tabs li': 'tab'
},

initialize: function() {
    $('.cpm-tabs li').each(function(idx) {
        if ($(this).hasClass('on')) {
            $('.tabs').hide().eq(idx).show();
        }
    });
},

tab: function(e) {
    var $tab = $(e.currentTarget),
        idx = $tab.index();
    
    $('.tabs').hide();
    $tab.addClass('on').siblings('li').removeClass('on');
    $tabs.eq(idx).show();
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号