大型backbone.js Web应用程序组织

2024-01-04

我目前正在开发一个基于backbone.js 的大型网络应用程序,并且在组织、“僵尸”等方面遇到了很多问题,因此我决定对代码进行重大重构。我已经编写了一堆辅助函数来处理“僵尸”;但是,我想从头开始,为代码创建一个很好的结构/组织。我还没有找到很多关于大型backbone.js组织的优秀教程/示例,所以我有点从头开始,想看看我是否能得到一些关于我开始的地方的意见。

显然我已经在全局命名空间中设置了我的代码;但我也想保持该名称空间相当干净。我的主 app.js 将类文件本身与全局命名空间分开;您可以使用 reg() 函数注册一个类(以便可以实例化它),并且 inst() 函数从类数组中实例化一个类。因此,除了这 3 个方法之外,MyApp 命名空间只有 Router、Model 和 View:

var MyApp = (function () {

    var classes = {
        Routers: {},
        Collections: {},
        Models: {},
        Views: {}
    };

    methods = {

        init: function () {
            MyApp.Router = MyApp.inst('Routers', 'App');
            MyApp.Model = MyApp.inst('Models', 'App');
            MyApp.View = MyApp.inst('Views', 'App');
            Backbone.history.start();
        },

        reg: function (type, name, C) {
            classes[type][name] = C;
        },

        inst: function (type, C, attrs) {
            return new classes[type][C](attrs || {});
        }

    };

    return methods;

}());

$(MyApp.init);

在模型、集合、路由器和视图中,我像往常一样工作,但随后需要在文件末尾注册该类,以便稍后可以通过以下方式实例化它(不会扰乱命名空间):

MyApp.reg('Models', 'App', Model);

这看起来是一种不必要的代码组织方式吗?其他人是否有更好的示例来说明如何组织具有许多路由器、集合、模型和视图的大型项目?


我最近参与了一个名为 GapVis 的 Backbone 项目(代码在这里 https://github.com/nrabinowitz/gapvis, 此处呈现的内容 http://nrabinowitz.github.com/gapvis)。我不知道它是否“真的很大”,但它很大并且相对复杂 - 24 个视图类,5 个路由器等。它可能值得一看,尽管我不知道我所有的方法都会相关的。你可以在我的长介绍评论中看到我的一些想法主 app.js 文件 https://github.com/nrabinowitz/gapvis/blob/master/app/app.js。一些关键的架构选择:

  • 我有一个单身人士State保存所有当前状态信息的模型 - 当前视图、我们正在查看的模型 ID 等。每个需要修改应用程序状态的视图都是通过在State,每个需要响应状态的视图都会监听该模型的事件。对于修改状态和更新的视图来说也是如此 - UI 事件处理程序events永远不要重新渲染视图,这是通过将渲染函数绑定到状态来完成的。这种模式确实有助于保持视图彼此分离——视图永远不会调用另一个视图上的方法。

  • 我的路由器被视为专门的视图 - 它们通过更新状态来响应 UI 事件(即输入 URL),并通过更新 UI(即更改 URL)来响应状态更改。

  • 我做了几件与你提议的类似的事情。我的命名空间有一个init功能与你的相似,并且settings常量对象。但我也将大部分模型和视图类放在命名空间中,因为我需要在多个文件中引用它们。

  • 我为我的路由器使用了一个注册系统,并根据我的观点考虑了一个注册系统,作为保留“主”类的一种好方法(AppRouter and AppView)不必了解每个视图。在里面AppView不过,事实证明子视图的顺序很重要,所以我最终对这些类进行了硬编码。

我很难说这是“正确”的做事方式,但它对我有用。我希望这对我有帮助 - 我也很难找到使用 Backbone 的大型项目的可见源代码示例,并且必须在我进行过程中解决其中的大部分问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大型backbone.js Web应用程序组织 的相关文章

  • 获取 pdf 第 1 页(共 2 页)的图像

    我正在使用 html2canvas 和 jsPDF 以及 Angular4 创建图像 我想将此图像放置在 2 页生成的 pdf 的第 1 页上 但似乎这条线 doc save test pdf 需要在函数内部htm2canvas 因为如果我
  • 将 javascript 放在 header 之外有多糟糕?

    这个问题几乎已经说明了一切 我开始添加一些功能到我的周末项目 http www my clock net 对于我和几个朋友来说 这是一个小应用程序 因为我们是交换生 所以它对我们来说有点有用 但事情是这样的 我在 php 中执行此操作并使用
  • 使用 Javascript 对象模型在 SharePoint 任务上设置“分配给”

    我想创建一个共享点任务并将其分配给我自己 当前用户 在 javascript 对象模型中 我有下面的代码 但我认为我需要设置 spusercollection 对象 而不是设置特定用户 但是 我似乎无法在任何地方找到如何执行此操作的任何示例
  • 内联执行生成的汇编程序

    我正在阅读以下演示文稿 http wingolog org pub qc 2012 js slides pdf http wingolog org pub qc 2012 js slides pdf其中讨论了 4 10 19 内联 ASM
  • toJSON() 和 JSON.Stringify() 之间的区别

    如果您需要读取或克隆模型的所有数据属性 请使用其 toJSON 方法 此方法返回属性的副本作为 对象 尽管有其名称 但不是 JSON 字符串 当 JSON stringify 为 使用 toJSON 方法传递一个对象 它将返回的字符串化 t
  • Javascript“命名空间”和 jQuery AJAX

    我正在使用此处列出的建议 http www odetocode com articles 473 aspx http www odetocode com articles 473 aspx 使用模拟的JavaScript AJAX网络聊天系
  • 标记内的值发生变化时调用函数

    JavaScript 有没有什么方法可以在段落标记的值更改时调用函数 概述 HTML p 00 00 p
  • jQuery 如何通过不同的列值计算表中的行数

    如何按表列计算不同的表行 Example table thead tr th NAME th th TECHNOLOGY th tr thead tbody tr td john td td jQuery td tr tr td mark
  • 根据数据更改图例颜色高图表

    我可以根据数据动态设置列的颜色 但无法弄清楚如何更改图例中的颜色 请注意 jsfiddle 最新的条形图是绿色的 但图例是蓝色的 有没有办法改变列颜色也会改变图例颜色 这是我用于列颜色的代码 jsfiddle http jsfiddle n
  • 'DOMException:使用'option:selected'选择器时无法在'Element'上执行'querySelectorAll'

    我正在运行一个页面 该页面在以下行中引发错误 var label select find option selected html select find option first html 为了完整起见 这里是完整的 jQuery 函数
  • D3 时间解析返回 null

    根据此页面上的说明 https github com mbostock d3 wiki Time Formatting https github com mbostock d3 wiki Time Formatting我正在尝试解析 ISO
  • 用于图形操作的 Javascript 库

    有没有建议的 javascript 替代 pythonpygraph http code google com p python graph or NetworkX http networkx lanl gov 应该注意的是 可视化不是必需
  • Bootstrap 3 - 模态背景不会根据模态对话框的高度调整大小?

    我将一个表单放入模式中 并尝试在用户触发单选按钮时显示表单的一些隐藏字段 显示隐藏字段后 模态自动重新缩放的高度 但模态背景的高度不能用作模态对话框 我该如何解决它 div class modal fade div class modal
  • jQuery 单击附加元素不起作用

    我有一个数组 我正在从 Array 获取数据并在 jQuery Append to list 中使用它 但是当我单击列表项时 它只显示最后一个元素 var array 1 2 7 3 4 8 5 6 9 for var i 0 i lt a
  • 正则表达式获取两个方括号之间的数字

    您好 我需要使用正则表达式在 JavaScript 中获取两对方括号内的字符串 这是我的字符串 12 23 asd 到目前为止我尝试的是使用这种模式 d 我需要获得价值12使用正则表达式 您可以使用以下正则表达式 d 这将提取12 from
  • 限制线的长度

    我正在尝试画一条代表 弹弓 的线 并且希望它具有最大拉伸长度 在 p5 中 我在位置和位置之间画了一条线 line posA x posA y posB x posB y posA 是鼠标 x 和 y posB 是画布上圆的位置 我想要做的
  • 如何使用 jQuery 获取 div 完整内容的高度?

    我正在尝试创建自己的滚动条 我已经尝试了大多数 jquery 滚动条插件 但似乎没有一个适合我 所以我决定创建自己的 我有一个带有可滚动内容的溢出区域 如果我能够计算出可滚动内容区域的高度 我就可以使滚动条正常工作 我尝试过 scrollH
  • python 函数返回 javascript date.getTime()

    我正在尝试创建一个简单的 python 函数 它将返回与 javascript 相同的值new Date getTime 方法 如所写here http www w3schools com js js dates asp javascrip
  • javascript:获取带有单位的CSS prop值[重复]

    这个问题在这里已经有答案了 我的代码是这样的 image 1 position absolute top 3vw 我的尝试 http jsfiddle net z8k6t3fb 1 http jsfiddle net z8k6t3fb 1
  • 调试客户端时使用 Chrome/Firefox

    我正在使用带有 getUserMedia 的相机 但出现了一些需要修复的错误 问题是 Visual Studio 只允许我使用 IE 调试 JavaScript 我的意思是命中断点 而 IE 不支持 getUserMedia 如果您想在 I

随机推荐

  • 对 Ruby on Rails 应用程序的 OpenID 支持

    在 Ruby on Rails 应用程序中启用 OpenID 登录的最新技术是什么 这是一个社区 wiki 其中包含该问题的最新答案 真实逻辑 最先进的身份验证解决方案似乎是真实逻辑 http github com binarylogic
  • Angular 6 - 请求的资源上不存在“Access-Control-Allow-Origin”标头

    我有一个 Angular 6 项目 其中有一个服务指向 server js Angular is on port 4200 and Server js is on port 3000 当我将服务指向http localhost 3000 a
  • 为什么我的 QT 应用程序无法运行?

    我在 Windows 7 64 位 使用 msvc 2010 上使用 Qt Creator 构建了一个 Qt 5 应用程序 该应用程序在我的计算机上完美运行 但在其他计算机上无法运行 我复制了所有显示为缺失的 dll依赖步行者进入程序文件夹
  • vuejs中的beforeMount和created生命周期钩子有什么区别

    我仍然不清楚应该在哪里使用 beforeMount 以及在哪里创建生命周期挂钩 在我看来 在这两种情况下 反应数据都已加载 并且是在 DOM 挂载之前 大多数情况下 是否使用并不重要beforeMount or created但有一些地方很
  • 当我必须排除导航栏时如何使 div 为显示高度的 100%

    有个问题我在导航栏下面有一个 div 我希望 div 拥有 100 的剩余空间 并在其周围添加一个漂亮的填充作为 Frame 它不应该是可以滚动的 另外 我无法以某种方式绑定导航栏 因为在项目中它的组件完全不同 我尝试简化我的代码 nav
  • 使用 Ransack 搜索多个字段

    我正在使用 Ransack 来允许对我的用户进行高级搜索 目前 用户已first name middle name and last name列 这是我的代码 field f attribute fields do a a attribut
  • GetProcAddress 返回 NULL

    我必须使用 DLL 中的一个简单函数 我能够加载库 但 GetProcAddress 返回 NULL 我想我理解名称修改 但也许我做错了什么 谢谢 代码如下 我将尽快添加所需的其他信息 mydll h ifdef MYDLL EXPORTS
  • 我可以用 JPA 命名我的约束吗?

    当我使用 maven hibernate3 plugin 又名 hbm2ddl 生成数据库模式时 它会创建许多数据库约束 其约束名称非常难以记住 例如FK7770538AEE7BC70 有没有办法提供一个更有用的名称 例如FOO FK BA
  • 在 Shiny 中单击按钮时自动滚动

    我有一个选项卡式闪亮应用程序 它根据用户输入生成相当多的内容 我试图弄清楚每次生成新内容时如何滚动到活动选项卡的底部 我尝试实现此中给出的答案question https stackoverflow com questions 366777
  • Android Wi-Fi 直连网络

    我正在Android上开发一个应用程序 我正在搜索范围内的所有对等点 然后与所有这些点连接 发起发现的设备成为组所有者 所有其他人成为客户端 我已经完成了所有连接的事情但现在我想让群组所有者向所有连接的对等点发送消息 如何实现这一点 还请告
  • 当活动在后台时,Android 服务无法连接到服务器

    这是我在 stackoverflow 上的第一篇文章 所以我希望我做的一切都是正确的 我正在开发我的第一个 Android 应用程序 并且在某些设备上遇到奇怪的行为 我有一个前台服务 可以定期获取设备的位置 并使用带有延迟运行程序的处理程序
  • 无法将 img 标签附加到 p 标签

    我是 JavaScript 的初学者 我正在尝试创建一个脚本 当页面的 文件输入 元素加载文件时会触发该脚本 该脚本基本上应该创建一个p元素 在其中插入一个img a innerText and a span 因此将所有这些附加到表单中 下
  • 数字 0 在二进制浮点数格式中是什么样子?

    浮点格式 IEEE 有 32 位 第 1 位用于符号 之后 8 位用于有偏差指数 最后 23 位用于尾数 在这个尾数中 第一个 1 始终是 1 始终隐藏 这引出了我的问题 数字 0 在这种格式中是什么样子的 因为如果指数为 0 则该数字将始
  • 查找文件无法索引的原因?

    如何查找文件在 Alfresco 中索引失败的原因 除了之前的回复 如果节点无法建立索引 您可以了解原因 使用 SOLR 管理页面和模式浏览器 例如参见这里 http localhost 8080 solr4 alfresco schema
  • 在一张图中对不同范围的数据使用多个scale_colour_gradient比例

    我对 R 很陌生 所以如果我的问题中有不清楚的地方 请耐心等待 我有一个data frame 蛋白质 有 5 列 即 1 蛋白质名称 2 蛋白质 FC 3 蛋白质 pval 4 mRNA FC 5 mRNA pval 和 6 频率 我正在尝
  • Bash 脚本不会匹配正则表达式

    我有以下 bash 脚本 应该生成输出 TEST bin bash test TEST THING OBJECT X if test a zA Z0 9 a zA Z0 9 A Z s then echo BASH REMATCH 1 fi
  • Visual Studio 9.0 Beta 程序文件位于 C:\

    我在 C 根目录中有几个 Visual Studio 9 0 Beta 程序文件 eula 1028 txt eula 1031 txt eula 1033 txt eula 1036 txt eula 1040 txt eula 1041
  • 在 fullCalendar 上使用 clientEvents 方法过滤事件

    我有一个完整的日历正在运行 现在我想使用客户事件 http fullcalendar io docs event data clientEvents 过滤事件的方法如下 selecter provider somevalue events
  • 使用 HTTP 基本身份验证的 python Flask REST API 的安全性

    我的服务器上运行着 python Flask 公开了一个由 iOS 应用程序使用的 REST API 我正在使用 Flask HTTPAuth 模块进行 HTTP 基本身份验证 我想知道这有多安全 因为每个请求都会发送用户名 密码字符串 我
  • 大型backbone.js Web应用程序组织

    我目前正在开发一个基于backbone js 的大型网络应用程序 并且在组织 僵尸 等方面遇到了很多问题 因此我决定对代码进行重大重构 我已经编写了一堆辅助函数来处理 僵尸 但是 我想从头开始 为代码创建一个很好的结构 组织 我还没有找到很