Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 如何在基于API的多页客户端应用程序中组织路由?_Javascript_Ruby On Rails_Api_Web Applications - Fatal编程技术网

Javascript 如何在基于API的多页客户端应用程序中组织路由?

Javascript 如何在基于API的多页客户端应用程序中组织路由?,javascript,ruby-on-rails,api,web-applications,Javascript,Ruby On Rails,Api,Web Applications,我有构建RubyonRails应用程序的丰富经验。但我从未做过基于API的应用程序。最近我对Knockout有了很好的了解,因此我知道如果客户端应用程序是单页(SPA)的话,如何组织它 我的问题是:如果我有基于API的多页(!)应用程序,我不知道如何管理页面之间的通信。当然,我可以硬编码页面中的所有链接,但如果我决定更改某些内容,它可能很快变得无法管理。我想在客户端安装某种路由器。你知道这个框架吗,或者你知道如何组织所有的路由吗?PagerJS是一个为淘汰而构建的路由框架。这应该可以满足您的单页

我有构建RubyonRails应用程序的丰富经验。但我从未做过基于API的应用程序。最近我对Knockout有了很好的了解,因此我知道如果客户端应用程序是单页(SPA)的话,如何组织它

我的问题是:如果我有基于API的多页(!)应用程序,我不知道如何管理页面之间的通信。当然,我可以硬编码页面中的所有链接,但如果我决定更改某些内容,它可能很快变得无法管理。我想在客户端安装某种路由器。你知道这个框架吗,或者你知道如何组织所有的路由吗?

PagerJS是一个为淘汰而构建的路由框架。这应该可以满足您的单页需求

如果您指的是保持应用程序与API资源同步:

我们有api/用户端点。然后创建一个可供整个应用程序访问的对象,该对象管理引用用户的所有操作。差不多

var userUrl = 'api/url'
var userResource = {
    get: function(callback){
        http.get(userUrl, function(err,data){
            callback(data);
        });
    },
    save: function(user, callback){
        http.put(userUrl, function(err, data){
            //...
        });   
    },
//... and so on

这样,您就不会在应用程序中到处引用API url,而只在用户资源中引用。

Microsoft Knockout SPA模板中使用的模式可以满足您的大部分需求。这是他们的viewmodel结构:

Login    AnotherPage    EtcPage
|_____________|____________|
              |
             App
              |
            Data
“数据”级别是所有api调用和/或本地存储/WebSQL/IndexedDB的地方。您还可以将站点范围的持久数据存储在敲除观测值中,以便于跨页面访问

“应用程序”级别包含所有站点范围的视图信息,如菜单/标题操作。因为App viewmodel总是被加载的,所以它是处理导航的好地方

顶级viewmodels只包含那些单独页面(登录等)的代码。它们都将App和Data viewmodels作为参数传递给它们的构造函数:

var LoginViewModel = function(app, dataModel){
  var self = this;
  // etc...
}
现在进行路由: Microsoft模板通过保留视图模型列表来处理布线的要点,然后基于链接单击为当前视图模型指定布线。我真的不喜欢那种方法


在这种情况下,我使用了路由。它很容易使用,但是文档是用coffeescript编写的,这很麻烦。虽然Finch确实提供了在页面之间传递参数的方法,但在这种情况下它是多余的。

有很多选项可供选择。但我不确定这与“基于API”的应用程序有什么关系。你是在寻找一个路由器的推荐,还是在组织你的项目时考虑到了路由问题?请提供更多细节。比如,我在Trello上构建了项目管理应用程序。它有现有的API。在我的应用程序中,我会为所有项目设置页面、为一个项目设置页面、为用户设置页面等。如果我构建了一个单页面应用程序(SPA),我可以使用您指定的任何路由器,或者像Ember.js、Backbone.js这样的框架(它们有自己的路由器)。但我不知道如何处理路由,如果我决定将这些页面隔离(在页面之间移动时使用它们自己的真实url和通常的页面重新加载),那么这将是服务器端路由,由Rails应用程序处理。您是否在询问如何在客户端生成服务器端路由?就像rails如何让您执行
order\u path(@order)
来生成路径
/orders/123
?不,我的问题是:我没有rails应用程序。我唯一拥有的是API(我无法更改),它用JSON响应我的请求。我想一页一页地构建应用程序(即,单独的html文件,其中包含项目的js模型、项目的页面、用户的页面等)。我看不到一个方便的方法来管理我的页面之间的所有交叉链接。谢谢你的帮助!