你如何在整个网站上组织大型JS/jQuery代码库?关于如何组织代码片段有很多很好的资源,但没有真正关于如何将它们整合在一起并使每个部分适合到位:侧面广泛的代码组织,使用相同代码的多个页面,保持松散耦合的DRY,等等
以下是我如何处理它.我从来都不习惯像这样组织我的代码,因为我认为它很草率并且可能导致可维护性/扩展问题,但我真的不知道更好.
我意识到我每个人都有他们自己的要求,而且没有交钥匙的解决方案,但我很想听到一些关于我做错了什么的意见,为什么我做错了,以及如何写更多的建议可维护的代码.
我认为我真正想要的是:
您如何处理需要在多个页面,多个页面上使用的逻辑?
你如何组织特定于页面的代码?将每个页面命名为一个全局对象是一个好主意吗?1.
您从一开始就做了什么,以确保随着您的应用变得越来越大,您不会不断重写您的组织模式?我可能在第四次迭代写这个东西.
每个页面都会收到主application.js文件.每个附加页面都有自己的application.pagename.js文件.我使用服务器端逻辑来包含文件(首先检查页面是否存在 - 某些页面不需要JS),然后按顺序初始化它们.
所以我的主页看起来像:
<script src="js/application.js"></script>
<script src="js/application.index.js"></script>
<script>
MyApp.init();
MyApp.index.init();
</script>
Run Code Online (Sandbox Code Playgroud)
我的URL约定是/ page/subpage/id /.我有大约10页和一大堆子页面,每个子页面都需要自己的逻辑.看这篇文章的最后一个例子.
我的大多数代码已经模块化为jQuery UI小部件或jQuery插件,所以我要说这些文件中75%的代码都需要()来创建一个小部件并启动它.
我根据需要使用requireJS来拉入小部件.
// application.js
var MyApp = {
init: function(){
var self = this;
// these widgets are available on every single page
// notice the call to jquery.deparam.js - i'll use this later to init subpage logic.
require(['js/widget1.js', 'js/widget2.js', 'js/widget3.js', 'js/jquery.deparam.js'], function(){
// deparam the query string. I'll use this later.
self.querystring = $.deparam.querystring();
// init …Run Code Online (Sandbox Code Playgroud) 我正在创建一项服务,允许用户在任意数量的设备(网络,Android,Roku,iOS,Apple TV)上注册,然后购买每月订阅以观看视频内容.订阅提供对整个目录的访问.我有自己的订阅管理API在服务器上运行,我想利用它作为事实的来源,这样用户可以在iPad上购买订阅,登录Roku上的应用程序,并继续观看他们中断的位置.
基本上,Netflix.
据我所知,以下是我的选择:
自动续订订阅:这是Netflix今天使用的,但Apple不会在其支付平台周围提供API或任何一组webhook,因此我不知道该选项如何工作.我的后端服务不知道Apple每个月会自动续订订阅,或者用户是否取消订阅.
非续订订阅:用户通过IAP在应用内购买订阅.购买完成后,应用程序同步订阅我的后端系统.只要需要进行权利检查,应用程序就会与我的后端接口.当用户的订阅即将到期时,应用程序必须再次显示购买工作流程.
导入iTunes报告:无法正常工作,因为它不是实时的(拉,不推),也没有告诉我有关取消订阅的任何信息.我只能生成新订阅者的报告.
收据验证和推送收据到我的服务:将无法工作,因为它取决于用户实际使用我的应用程序.理论上,用户可以在我的应用程序中订阅,切换到Roku,永远不会再打开它.
完全跳过IAP并要求用户通过网络订阅.
我错过了什么吗?我很好奇Netflix是如何解决这个问题的.
我遇到了会话问题,有时我刚设置的会话变量在下一页请求时未定义.我通常必须再次检查流程才能正确设置变量.
我可以确认我没有尝试将会话变量设置为undefined; 他们有合法的价值.
在我的应用程序中,用户从/ twitter/connect /移动到/ twitter/callback /.前者从twitter中检索了一些oauth数据,后者将用户记录到twitter中.
/ twitter/connect /很简单:
app.get('/twitter/connect/?', function(req, res){
consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
if (error){
// error handling here
} else {
req.session.oauthRequestToken = oauthToken;
req.session.oauthRequestTokenSecret = oauthTokenSecret;
// if I console.log the two session variables above
// they have the proper values.
res.redirect("https://twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);
}
});
});
Run Code Online (Sandbox Code Playgroud)
之后,Twitter将它们发送回/ twitter/callback /:
app.get('/twitter/callback/?', function(req, res){
console.log(req.session.oauthRequestToken);
console.log(req.session.oauthRequestTokenSecret);
// more often than not, the two variables above are
// undefined. but not always. usually on the …Run Code Online (Sandbox Code Playgroud)