Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击主干路由器中的链接时如何传递事件(访问数据属性)_Javascript_Backbone.js - Fatal编程技术网

Javascript 单击主干路由器中的链接时如何传递事件(访问数据属性)

Javascript 单击主干路由器中的链接时如何传递事件(访问数据属性),javascript,backbone.js,Javascript,Backbone.js,我在主干应用程序中有这样的路由 <a href="/2015/09/28/do-you-drink-whiskey" data-info="jerk">link</a> <a href="/2015/09/29/do-you-drink-beer/" data-info="slob">link</a> 更新 您可以在这里看到,即使使用jQuery(正如发布的第一个答案所建议的那样),数据属性也是不可访问的,因为主干网没有传递事件使用jQuery

我在主干应用程序中有这样的路由

<a href="/2015/09/28/do-you-drink-whiskey" data-info="jerk">link</a>
<a href="/2015/09/29/do-you-drink-beer/" data-info="slob">link</a>
更新

您可以在这里看到,即使使用jQuery(正如发布的第一个答案所建议的那样),数据属性也是不可访问的,因为主干网没有传递事件

使用jQuery data()函数

你也可以使用

$(this)
而不是

$(e.currentTarget)
更新

要在函数Match中获取数据信息,请执行以下操作

var R = Backbone.Router.extend({
    routes:{
        "": "list",
        "restaurants/:id": "restoDetails",
        "2015/*splat": "matchAnything"
    },
    matchAnything: function(e){
        var info = lastElementClicked.data('info');
        console.log(info, "info?");
    },
    restoDetails: function() {
        console.log('restoDetails', arguments);
    },
    list: function() {
        console.log('list', arguments);
    }
});

var lastElementClicked;

$(document).on('click', 'a[href^="/"]', function(e){
    e.preventDefault();
    lastElementClicked = $(this)
    var href = lastElementClicked.attr('href');
    Backbone.history.navigate(href, {trigger: true});
});
new R();
Backbone.history.start({pushState: true});

我想我应该重新表述我的问题,指出如何通过主干路由器传递事件,因为即使我使用jquery,它也不可用。主干未通过该事件。这里是你答案的演示,啊,我明白了,你想在matchAnything函数中得到这个值。我只能做一个可行的方法来检查这一点,虽然它的工作可能不是最好的解决方案。我认为你应该考虑用不同的方式来处理你的数据。信息(“jerk”、“slob”)应该是路由路径的一部分,或者它应该属于对路由事件做出反应的模型。
$(e.currentTarget)
var R = Backbone.Router.extend({
    routes:{
        "": "list",
        "restaurants/:id": "restoDetails",
        "2015/*splat": "matchAnything"
    },
    matchAnything: function(e){
        var info = lastElementClicked.data('info');
        console.log(info, "info?");
    },
    restoDetails: function() {
        console.log('restoDetails', arguments);
    },
    list: function() {
        console.log('list', arguments);
    }
});

var lastElementClicked;

$(document).on('click', 'a[href^="/"]', function(e){
    e.preventDefault();
    lastElementClicked = $(this)
    var href = lastElementClicked.attr('href');
    Backbone.history.navigate(href, {trigger: true});
});
new R();
Backbone.history.start({pushState: true});