如何使用 Backbone 处理单页应用程序的 UI 状态

2024-03-16

请耐心等待,因为我来自传统的 Web 开发背景,使用 ASP.Net,甚至服务器端 MVC。我正在尝试使用 Backbone.js 构建一个高度交互的单页应用程序,以帮助组织我的 javascript 代码并构建 UI。

我在构建 UI 组件的某些概念或方法以及决定如何处理某些方面时遇到困难。我将使用这个过于简化的屏幕截图作为我的问题和讨论的基础。

让我们使用“TO-DO”应用程序作为示例(当然)。UI 非常简单。我有以下“组件”......

  • 结果列表显示符合当前所选条件的当前待办事项集
  • 我的待办事项列表(个人、工作、博客项目)
  • 截止日期过滤器列表(今天、明天、本周、下周)
  • 标签列表(Bug、功能、想法、后续)
  • 一个搜索框

所需功能

  • 每当搜索条件发生变化时更新结果(选择列表、选择到期数据、选择一个或多个标签、输入搜索文本等)
  • 用户可以编辑、添加和删除列表。 (这个模型中没有真正显示)
  • 用户可以编辑、添加和删除标签。 (这个模型中没有真正显示)
  • 用户可以编辑、添加和删除待办事项。 (这个模型中没有真正显示)

数据模型

我发现有几个与“数据”相关的模型。这些很容易识别。

  • ToDo(代表单个待办事项)
  • ToDoCollection(表示待办事项的集合)
  • ToDoList(代表单个待办事项列表)
  • ToDoListCollection(表示待办事项列表的集合)
  • Tag(代表单个标签)
  • TagCollection(代表标签的集合)

如何存储UI状态?

这就是我遇到麻烦的地方。我想显示当前选择了菜单(左侧)中的哪些项目。我当然可以监听事件并在选择项目时向项目添加“选定”类,但我也有规则,例如“一次只能选择一个列表”,但可以选择“任意数量的标签”一次。此外,由于待办事项列表菜单和标签菜单是动态的,因此它们已经与 ToDoListCollection 和 TagCollection 模型关联。它们是根据这些“数据模型”的状态呈现的。

那么,如何使用 Backbone 处理所有这些不同视图的 UI 状态的管理?我很感激任何想法或建议。

Thanks!


我的问题和你的问题一模一样,我会让你知道秘密:作弊。

这里有两个不同的应用程序层,以及它们之间的一些混淆。第一层是系统中待办事项对象之间的关系。您将这些存储在传统的对象关系模型中,并像任何其他 RESTful 应用程序一样创建/检索/更新/删除它们。

第二层是这些对象的显示与对象本身之间的关系。您想要保留一些状态。这里有一个重要的见解:只要对系统进行 GET、PUT 或 POSTED 的每个对象都有唯一的 ID,第二层就可以完全独立于第一层。

第一层是“待办事项管理器”的 RESTful API。第二点是本次演讲的独特之处。它与第一个数据的关系是脆弱的。所以这就是我所做的:我将该表示层状态编码为 JSON 对象,并将其写入用户配置文件中的 8 位干净文本字段。每次用户改变状态时,我都会这样做。

当应用程序加载时,它会从 REST API 加载大量数据和表示层信息,丢弃表示层中任何无意义的内容,然后启动 Backbone.History 并初始化表示。服务器不需要知道any有关客户如何工作的所有详细信息。只要客户说出您的 RESTful 行话,它就可以将“该特定客户关心的各种事情”保存到该文本字段,而不会影响您的对象或其关系。

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

如何使用 Backbone 处理单页应用程序的 UI 状态 的相关文章

  • 在 Backbone 渲染方法中调用 jQuery 插件

    我在 Backbone 中有一个渲染方法 基本上是这样的 render function tmpl this template attrs appendTo this el return this 这是从路由器操作中调用的 action f
  • 主干属性可以包含集合吗?

    在主干中 存储作者和书籍之间的关系 在本地存储中 所需的方式是什么 是否可以将集合作为属性 或者应该使用数组还是 var book Backbone Model extend defaults title var books Backbon
  • Backbone 对象渲染没有方法 apply - 绑定问题

    所以我在我的 AppView 中这样做 var flowerModel new app DataModel title flower values tulip rose dandelion dataToShow tulip rose dan
  • Backbone 中仅限客户端的属性

    我有一个相当通用的模型和该模型的集合 见下文 我正在将其作为一系列视图的基础 在几个视图上 选择其中一个模型会生成操作 通过 selected 属性 并且我需要能够仅在客户端跟踪选择 然而 在 Backbone 中似乎没有干净的方法来做到这
  • 主干+rails TypeError:List.Header不是构造函数

    我正在尝试按照从该网站购买的教程进行操作 http www backbonerails com http www backbonerails com 我正在关注该系列的第五集 起床运行 第 1 部分 在视频的 46 52 左右 他有 lis
  • 在 Backbone.js 中,为什么静默更改最终会触发更改事件?

    当我经过时 silent true 在 Backbone 模型中设置属性时 为什么不直接抑制change attribute事件 下次更改属性时触发该事件有什么好处 Update Backbone 0 9 10 改变了传递行为 silent
  • Backbone - 从 API 获取 JSON 数据

    这几天我在玩Backbone 我想从 Twitter 搜索 API 接收一些数据 但我真的不明白它是如何工作的 这是我的代码 function Tweet Backbone Model extend Tweets Backbone Coll
  • 如何将属性传递到 Backbone 视图?

    我正在使用 Backbone v1 0 0 开发我的应用程序 在开始工作期间 现在已经更新到 v1 1 0 所以在我以前能做的地方 var myView new MyView hash something 并访问hash在视图内部使用 th
  • 在Javascript中,这个下划线是什么意思?

    var Gallery Backbone Controller extend index null photos null album null subalbums null subphotos null data null photosv
  • Backbone - 对 id 使用不同的字段名称

    我正在移植一个旧应用程序以使用backbone js 希望如此 问题是系统中的各种对象都没有使用 id 作为 id 每个对象都是不同的 通过阅读 我在初始化 Backbone Model 时提出了以下解决方案 initialize func
  • 如果用户尚未登录,我如何拒绝他们访问我的 Backbone 应用程序的部分内容?

    所以我有一个 Backbone 应用程序 网页主页 现在 如果您登录我的网站 我会使用数据库中的用户详细信息创建一个全局对象 但是 您仍然可以直接点击应用程序中的其中一条路线 我应该如何处理未 登录 的用户并将他们重定向到 您必须登录页面
  • 使用node.js和backbone.js进行模板渲染

    有没有人找到一个好的解决方案来开发可在服务器和客户端上使用的backbone js模板 这对于backbone js历史堆栈来说是非常理想的 因为用户可以在浏览器位置栏中共享和链接到真实的url 并且node js服务器可以在第一个页面视图
  • 重新渲染子视图后,主干事件会多次触发

    我们有一个由侧边栏和几个子视图组成的主干视图 为简单起见 我们决定让侧边栏和子视图由单个视图管理render功能 但是 那click edit单击侧边栏项目之一后 事件似乎会多次触发 例如 如果我从 常规 开始并单击 edit then h
  • 主干表视图消耗行视图 - 如何构造?

    我有一组模型希望在表格视图中呈现 每个模型应由表中的一行表示 并且该行应使用模板生成 我应该能够将事件处理程序附加到该行 例如单击 在事件发生时发出有关与该行关联的模型的一些特定信息 我见过类似的事情的一种常见方法是将每一行分解到它自己的视
  • 车把模板的文件扩展名

    我更改了车把模板的扩展名 并在调用 handlebarjs 编译函数的函数中引用了相同的扩展名 它工作得很好 没有任何问题 但我很好奇是否还有其他人尝试过 如果您认为这可能会因任何原因导致问题 请告诉我 出于某种原因 我觉得扩展名 hand
  • Backbone.js 和 JQueryUI 对话框 - 事件未绑定

    我正在尝试在 JQuery 对话框中使用 Backbone js 我已经设法让对话框呈现并打开 但它似乎没有触发我的事件 我添加了一个测试事件来检查这一点 单击它并没有得到预期的结果 我尝试按照此说明进行操作blogpost http ba
  • “Backbone.js 视图”中的单击事件不起作用

    我尝试开始使用backbone js 但我发现当我不使用 body 作为视图的el时 该事件不起作用 这是代码 您可以将其另存为 html 文件并运行
  • 覆盖骨干模型更改事件

    我认为我想做的事情很简单 我只是不知道该怎么做 当我的模型属性之一发生更改以便将一些数据传递给事件处理程序时 无论更改是值的增加还是减少 我想触发我自己的事件 基本上我希望我的处理程序在视图中执行此操作 handler function i
  • 对周围的所有 Node JS 框架/库等感到困惑 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我感觉有点困惑 有很多 Node js 相关 东西 的框架 有人能给我一个概述吗 以下库 框架 其他内容如何相互关联 交互 其中包括什么或
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re

随机推荐

  • 让QGraphicsView做平滑centerOn

    我并不是 Qt 的新手 但有一些事情我不知道 我正在使用 Python 进行编程 但请随意以任何语言发布您的答案 所以 我有几个QGraphicsItem s 位于QGraphics场景 以正常观看场景QGraphicsView 一切正常
  • 你能克隆一个匿名对象吗? (Java/面向对象编程)

    我正在创建一个非常常见 非常简单的形状的库 球体以及环面等都将成为成员 环面有两个半径场 而球体有一个 我们可以通过更改函数的实现以包含两个半径来提供修改后的行为 当然还可以添加额外的半径字段 环面很常见 因此将这种行为包含在永久库中是有益
  • 首先添加一个UIView,甚至是导航栏

    我想在任何其他视图 甚至导航栏 上方显示一种 弹出 视图 如下所示 全屏黑色背景 alpha 为 0 5 可以看到其他内容UIViewController下 a UIView中间的窗口包含一些信息 如果您想了解一切 则可以使用日历 为此 我
  • 如何检查 Java 上的 SSLSocket 连接是否正常?

    我有一个 SSLSocket 池 我需要在借用对象之前检查套接字连接是否正常 isConnected isInputShutdown 和 isOutputShutdown 没有用 因为它们不检查双方是否已连接 如果我尝试从套接字写入或读取
  • 删除表中的行会导致 LOCKS

    我正在运行以下命令从大型表 1 5 亿行 中批量删除行 DECLARE RowCount int WHILE 1 1 BEGIN DELETE TOP 10000 t1 FROM table t1 INNER JOIN table2 t2
  • 为什么 React useState 钩子不能在 for 循环中工作?

    我很好奇为什么在 for 循环中设置状态不能按预期工作 这是我使用钩子的代码 const count setCount useState 0 const onButtonPress gt for let i 0 i lt 100 i set
  • 此脚本(使用 Outlook 发送电子邮件)如何工作?

    谁能帮助我了解 MAPI 的工作原理 我有一个简单的 vbscript 它使用 MAPI 发送电子邮件 它工作得很好 但是 我不知道它是如何做到的 后台发生了什么 Const ForReading 1 Set args WScript Ar
  • Jquery - 根据 的内容应用类

    我有一个水平导航菜单 我可以编辑其源代码 我唯一的选择是在通过 JQUERY 加载时动态添加类 假设我有 3 个选项卡 Home Profile Blog 每个都有一个链接 如下所示 a href home html Home a JQUE
  • 按距给定的升序距离对点数组进行排序

    我需要你的帮助 我有一个已知坐标的点 例如 x 5 y 4 和每个代表点的对象数组 x 2 y 6 x 14 y 10 x 7 y 10 x 11 y 6 x 6 y 2 现在我需要按距给定点的距离按升序对数组进行排序 例如 x 6 y 2
  • 识别表中所选行何时已被选择

    我有一个p datatable在 primefaces 中 我有不同的侦听器 以不同的方式在数据表中选择行事件 我需要确定表中所选行何时已被选择 我该怎么做 我需要这个因为我不想那个p blockUI当我选择表中已选择的行时运行 有我的页面
  • textcat -> 不允许架构额外字段

    我一直在尝试练习从本教程中学到的知识 https realpython com sentiment analysis python https realpython com sentiment analysis python 使用 PyCh
  • 如何仅使 Dropzone.js Previews Div 可点击而不是整个表单

    我必须使用 dropzone js 表单 它将几个输入和一个文件上传信息发送到另一个页面 我的 dropzone 代码如下所示 gt Dropzone options mydropzone maxFiles 1 maxFilesize 10
  • 如何在Python中根据特定日期提取前两年的数据?

    我有一个 csv 文件 其中包含过去 3 年的时间序列月度数据 根据今天的日期 我只想读取前两年的数据来预测未来 Data file example has data from 01 01 15 to 31 10 19 Date Value
  • iOS 10 后台 CoreBluetooth 广告

    首先 我有一台 iPad Air 2 和一台 iPhone 7 为了进一步阅读 我们估计该应用程序在 iPad 上处于活动状态并打开 在 iPhone 上处于后台模式 该应用程序完全相同 即使具有相同的蓝牙服务 UUID 和相同的 Data
  • UIDocument 未保存?

    无论我尝试什么 这都行不通 我正在尝试使用UIDocument在本地保存我的 文本 文件 当我创建文件 即未加载 时 它保存得很好 However 如果我通过打开文件然后保存来加载文件 则它根本不会保存 EDIT 我尝试在应用程序进入后台时
  • SQL 条件并集

    问题 我有一个返回文件列表的 SQL 函数 现在我应该使用联合将一个附加列表加入到该列表中 但前提是用户是管理员 那可能吗 就像是 CREATE FUNCTION tfu CMS Process bIsAdmin bit Add the p
  • 使用箭头键滚动 div

    这类似于SO 如何用箭头键移动div https stackoverflow com questions 4950575 how to move a div with arrow keys 所以也许一个明确且知情的 不 就足以作为答案 我可
  • Passport js通过url验证

    我在我的应用程序中使用 Express JS 和 Passport JS 我想为新用户提供通过特定 URL 自动登录一次的机会 我可以使用 URL 中的信息从数据库中获取用户 因此我有一个 User 对象 带有 id 电子邮件 散列密码等
  • 在 HttpWebRequest 中添加自定义标头

    我需要添加一些自定义标头HttpWebRequest目的 如何添加自定义标头HttpWebRequestWindows Phone 7 中的对象 您使用Headers具有字符串索引的属性 request Headers X My Custo
  • 如何使用 Backbone 处理单页应用程序的 UI 状态

    请耐心等待 因为我来自传统的 Web 开发背景 使用 ASP Net 甚至服务器端 MVC 我正在尝试使用 Backbone js 构建一个高度交互的单页应用程序 以帮助组织我的 javascript 代码并构建 UI 我在构建 UI 组件