Javascript 如何在基于API的多页客户端应用程序中组织路由?
我有构建RubyonRails应用程序的丰富经验。但我从未做过基于API的应用程序。最近我对Knockout有了很好的了解,因此我知道如果客户端应用程序是单页(SPA)的话,如何组织它 我的问题是:如果我有基于API的多页(!)应用程序,我不知道如何管理页面之间的通信。当然,我可以硬编码页面中的所有链接,但如果我决定更改某些内容,它可能很快变得无法管理。我想在客户端安装某种路由器。你知道这个框架吗,或者你知道如何组织所有的路由吗?PagerJS是一个为淘汰而构建的路由框架。这应该可以满足您的单页需求 如果您指的是保持应用程序与API资源同步: 我们有api/用户端点。然后创建一个可供整个应用程序访问的对象,该对象管理引用用户的所有操作。差不多Javascript 如何在基于API的多页客户端应用程序中组织路由?,javascript,ruby-on-rails,api,web-applications,Javascript,Ruby On Rails,Api,Web Applications,我有构建RubyonRails应用程序的丰富经验。但我从未做过基于API的应用程序。最近我对Knockout有了很好的了解,因此我知道如果客户端应用程序是单页(SPA)的话,如何组织它 我的问题是:如果我有基于API的多页(!)应用程序,我不知道如何管理页面之间的通信。当然,我可以硬编码页面中的所有链接,但如果我决定更改某些内容,它可能很快变得无法管理。我想在客户端安装某种路由器。你知道这个框架吗,或者你知道如何组织所有的路由吗?PagerJS是一个为淘汰而构建的路由框架。这应该可以满足您的单页
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模型、项目的页面、用户的页面等)。我看不到一个方便的方法来管理我的页面之间的所有交叉链接。谢谢你的帮助!