Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Backbone.js 将路由作为事件运行_Backbone.js_Requirejs - Fatal编程技术网

Backbone.js 将路由作为事件运行

Backbone.js 将路由作为事件运行,backbone.js,requirejs,Backbone.js,Requirejs,我有一个用require.js和backbone.js构建的前端javascript应用程序。应用程序的大多数部分使用标准/推荐的构建应用程序的方法,包括使用主干路由器对象进行路由 现在,我想在应用程序的一个部分中添加一些更直观的更改。我不想点击一个链接和路由器渲染另一个视图,我想在这之前做一些视觉上的改变。就像单击链接时发生的GUI效果一样,当该效果完成时,新视图应该像以前一样呈现 我想一种可能的方法是将点击事件挂接到给定的链接,取消正常传播(取消主干对象中的路由捕获),执行可视化操作,然后手

我有一个用require.js和backbone.js构建的前端javascript应用程序。应用程序的大多数部分使用标准/推荐的构建应用程序的方法,包括使用主干路由器对象进行路由

现在,我想在应用程序的一个部分中添加一些更直观的更改。我不想点击一个链接和路由器渲染另一个视图,我想在这之前做一些视觉上的改变。就像单击链接时发生的GUI效果一样,当该效果完成时,新视图应该像以前一样呈现

我想一种可能的方法是将点击事件挂接到给定的链接,取消正常传播(取消主干对象中的路由捕获),执行可视化操作,然后手动调用路由器或直接渲染视图。然后我需要从视图访问router对象(调用通常捕获单击的操作方法),或者我需要从添加到链接的单击事件中渲染视图,导致渲染代码重复(在事件函数和视图中)


有没有一种既好又整洁的方法可以做到这一点,而不必编写难看的意大利面代码?

您可以使用以下代码捕获每个链接上的所有点击,然后执行所需操作:

$(document).on('click', 'a:not([data-bypass])', function (evt) {

    var href = $(this).attr('href');
    var protocol = this.protocol + '//';

    if (href.slice(protocol.length) !== protocol) {
        evt.preventDefault();
        var rootLength = Backbone.history.root.length - ((Backbone.history.root.substring(Backbone.history.root.length - 1) === '/') ? 1 : 0);

        // Here before calling the history.navigate that trigger your router 
        // routes, do your visual effects

        Backbone.history.navigate(href.slice(rootLength), {
            trigger: true
        });
    }
});

我以前没有使用过history.navigate。它解决了我的案子。有点奇怪,它没有包含在主干文档中。。