Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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 - Fatal编程技术网

Backbone.js:如何从一个视图重定向到另一个视图?

Backbone.js:如何从一个视图重定向到另一个视图?,backbone.js,Backbone.js,在Backbone.js中,Django中的HttpResponseRedirect的等价物是什么 在一个Backbone.View中,我需要向服务器提交数据,然后将用户重定向到另一个视图。这是怎么回事?我应该使用事件还是路由器 谢谢 以下是我一直采取的方法: 假设您有一个路由器定义了如下路由: var MyRouter = Backbone.Router.extend({ routes: { 'first-route': 'first', 'second

在Backbone.js中,Django中的HttpResponseRedirect的等价物是什么

在一个Backbone.View中,我需要向服务器提交数据,然后将用户重定向到另一个视图。这是怎么回事?我应该使用事件还是路由器


谢谢

以下是我一直采取的方法:

假设您有一个路由器定义了如下路由:

var MyRouter = Backbone.Router.extend({
    routes: {
        'first-route': 'first',
        'second-route': 'second'
    },
    first: function() {
        // render first view
    },
    second: function() {
        // render second view
    }
    // ...
});
我通常只使用标记并将href属性设置为要重定向到的哈希:

<a href="#first">First</a>
我不是100%确定后者是“最佳实践”,但我在许多优秀教程中都看到了这一点

//编辑


因此,在重新阅读您的原始问题后,您可以通过设置位置散列来在服务器回拨同步呼叫后“重定向”。

了解这一点很重要,因此“重定向”听起来可能像您想要的,但很可能不是。如果您在构建有状态桌面应用程序方面有任何经验,请借鉴这些经验以及如何从一个屏幕移动到另一个屏幕。如果你没有任何桌面客户端的体验,我强烈建议你把它放在心上,因为主干应用程序是一个有状态的应用程序,它只是碰巧在浏览器中运行

假设你有一些有状态的应用程序知识,你有几个选项可以让它工作

Router.navigate:redirect(重定向)等价物(不喜欢这个) 在您对服务器的呼叫返回后,您可以调用路由器的
navigate
方法:
myRouter.navigate(“/myRoute”,true)
。确保将
true
参数作为第二个参数传递。或者,就像JasonOffutt建议的那样,只需手动更新url的散列片段,实际上也是一样的

,但有些人是

程序工作流 您可以创建一个非常简单的对象,当您调用一个方法时,它知道如何在屏幕上显示正确的视图。例如,如果需要显示名为“WidgetView”的视图,请使用名为
showWidgetView
的方法创建一个对象。通过将对象附加到命名空间、将其传递到运行的代码或其他技术,使具有此方法的对象在代码中的任何位置都可用。当对服务器的调用返回时,调用对象的
showWidgetView
方法,让它为您显示下一个视图

这是功能性的,但它很快就会变得混乱,而不是真正的小应用程序。不过,我是在小应用程序中这样做的。当您使用larget应用程序时,您需要考虑事件化工作流和事件驱动架构

事件和工作流 在服务器调用返回后,使用类似的方式触发事件,让系统的其他部分知道发生了重要的事情。然后,系统的这些其他部分可以确定如何响应,包括用新视图替换当前视图的调用代码、更新url路由等

在使用事件的过程中,最终会遇到一组代码,这些代码似乎不适合任何地方。这通常是您的事件处理程序,并且通常是想要封装的对象/关注点的标志。如果您使用的是事件驱动体系结构,那么在主干中创建更高级别的工作流对象是一个好主意

这些工作流对象通常负责启动工作流,方法是获得所有正确的视图和模型,然后包含视图和/或事件聚合器的事件处理程序。事件处理程序方法将通过通过方法传递的参数或通过查看其他状态来检查应用程序的状态,并确定接下来需要发生什么。然后,它将导致应用程序根据新状态更改为它需要的外观

此外,还创建了工作流对象。这是您将自己构建的东西,只需使用简单的旧JavaScript即可


希望有帮助。

另一种观点?还是另一页?这很有帮助。谢谢棒极了!我知道一定有比直接操作URL哈希更好的方法。我还是个新手。就在我认为我正在解决问题的时候,我学到了一些新东西。谢谢你!路由器导航方法在木偶中对我不起作用。这是被设计禁用的吗?您链接到的事件聚合器blogpost是Fantactistic,在主干内设置
window.location.hash
,不是一个好的做法。改用
Backbone.history.导航
window.location.hash = 'first';