2

为了更容易阅读,我将所有内容都放在了initialize函数下。这里有什么问题吗?警报被触发,所以它不是条件。我隐藏了共享操作,并希望在桌面上的悬停和移动设备上的点击上显示它们,因为悬停是不可能的。我在这里错过了什么吗? console.log()不会抛出任何错误。

App.Views.Title = Backbone.View.extend({

initialize:function(){

    _.bindAll(this,"stickToTop");
    this.template = _.template($("#title").html());
    this.render();
    $(window).scroll(this.stickToTop);

    var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
    var share = this.$(".share");

    if(isMobile){

        // alert('mobile')
        share.on('click' , this.shareMobile , this);

    }else{
        // alert('not mobile')
        share.on('hover' , this.shareDesktop , this);

    }

},
...
4

3 回答 3

13

我认为问题可能是您通过使用delegateEvents以 jquery 方式而不是 Backbone 方式绑定事件。

我建议您尝试以下方法:

if(isMobile){

    // alert('mobile')
    this.delegateEvents({"click .share" : "shareMobile"});

}else{
    // alert('not mobile')
    this.delegateEvents({"hover .share" : "shareDesktop"});

}

希望这可以帮助。

- - - - 更新 - - - -

我自己对此进行了测试,您可以以非常漂亮的方式做到这一点!

首先从您的初始化方法中删除所有 isMobile 和委托事件垃圾,它只会把它弄乱!然后将 Backbone.View 事件哈希作为返回事件哈希的函数(是的,您可以这样做!)

events: function() {
  // check for the mobility HERE!
  var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
  var events_hash = {
    // insert all the events that go here regardless of mobile or not
  };
  if (isMobile) {
    _.extend(events_hash, {"click .share": "shareMobile"});
  } else {
    _.extend(events_hash, {"hover .share": "shareDesktop"});
  }
  return events_hash;
}

瞧!

于 2012-07-18T11:57:05.383 回答
1

我会这样做:

App.Views.Title = Backbone.View.extend({

    events : {
      'hover .mobile .share' : 'shareMobile',
      'click .desktop .share' : 'shareDesktop'
    },

    initialize:function(){

        //stuff...

        var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);

        if(isMobile){
           this.$el.addClass('mobile');
        }else{
           this.$el.addClass('desktop');
        }

    }
    //stuff
});
于 2012-07-18T14:03:02.247 回答
0

嗯..是你定义 $share 但然后使用 share.on (没有 $)?

于 2012-07-18T10:09:26.667 回答