Javascript PhoneGap主干应用程序事件在新视图中启动

Javascript PhoneGap主干应用程序事件在新视图中启动,javascript,cordova,backbone.js,Javascript,Cordova,Backbone.js,这是一个很难解释的问题,但我会尽力: 简而言之:我有一个使用主干网的Phonegap应用程序。当在视图上触发元素a上的触摸事件时,例如视图a,该事件导航到新视图B。如果元素B与元素a处于相同位置,则在视图B上的元素B上触发事件 详细说明:如上所述,应用程序使用主干网。该问题只发生在移动设备上,而不是我机器上的浏览器上。我已经实现了jquerytouch事件来处理普通jQuery 来自我的路由器的代码片段: 来自MenuView的片段 来自我的CartView的片段 当我点击菜单购物车上的一个元素

这是一个很难解释的问题,但我会尽力:

简而言之:我有一个使用主干网的Phonegap应用程序。当在视图上触发元素a上的触摸事件时,例如视图a,该事件导航到新视图B。如果元素B与元素a处于相同位置,则在视图B上的元素B上触发事件

详细说明:如上所述,应用程序使用主干网。该问题只发生在移动设备上,而不是我机器上的浏览器上。我已经实现了jquerytouch事件来处理普通jQuery

来自我的路由器的代码片段:

来自MenuView的片段

来自我的CartView的片段

当我点击菜单购物车上的一个元素时,就会出现这个场景,该元素依次调用navigate,从而创建新的视图CartView。CartView有一个复选框,其位置与cart元素在previsou视图上的位置相同。当呈现CartView时,复选框被切换,我收到警报,即使该视图上没有事件。就好像上一个视图上的事件通过气泡进入下一个视图

我显然不想发生这种事。有人知道为什么会发生这种情况,以及如何预防这种情况吗

我希望我对这个问题解释得足够好


我一直在寻找我的问题的解决方案,但我发现的唯一结果是在同一个视图上触发两次事件,而不是在多个视图上触发一个事件。

当我今天查看我的问题时,我看到了这个问题,我想如果有人有相同的问题,我会发布我的解决方案

我一直无法完全弄清楚问题的真正原因是什么,我猜这只是Android浏览器处理事件的方式,而是添加了e.preventDefault;对于我的事件,修复了它:

来自MenuView的片段

来自我的CartView的片段

routes : {
    "cart" : "cart",
    "menu" : "menu"
},
cart: function (args, options) {
    var options = options || {};
    var view = App.Router.loadView(new App.Views.CartView(options), {access:true});
    return view;
},
menu: function (args, options) {
    var options = options || {};
    var view = App.Router.loadView(new App.Views.MenuView(options));
    return view;
},
loadView: function (view, options) {
    var options = options || {},
        returnview = view;

    if (App.view) {
        //Close views and subviews
        _.each(App.view.subViews, function (subView) {
            subView.close();
        });
        App.view.close();
    }
    App.view = returnview;
    return $('#app-content').append(App.view.render().$el);
}
events: {
    'tap #cart': function () {
        App.Router.navigate('cart', {trigger:true});
    }
},
'change #article-stock': function (e) {
    alert('this should not happen!')
}
events: {
    'tap #cart': function (e) {
        e.preventDefault();
        App.Router.navigate('cart', {trigger:true});
    }
},
'change #article-stock': function (e) {
    e.preventDefault();
    alert('this should not happen!')
}