如何让一个视图知道另一个视图的变化?

2023-12-07

假设您正在制作一个音乐库应用程序。

您有一个包含流派列表的视图,另一个显示所选流派的内容。当用户单击列表上的流派时,其他视图中的内容应相应更新。

为了最大限度地减少依赖性,最好的方法是什么?

除了绘制各个流派的视图之外,我还没有找到任何其他地方可以听到鼠标点击的声音。我可以从那里发送一个事件,但是让该事件更新绘制流派内容的其他视图的最佳方式是什么?谁应该收听该事件、流派内容视图或其集合?

编辑:我从应用程序的路由器实例化了两个视图,并且我确实设法通过使视图相互了解来使其工作,但这当然不是最佳的。


您可以创建一个简单的模型来保存应用程序状态,不需要任何花哨的东西,只需要一包实现常用 Backbone 事件方法的数据:

var AppState  = Backbone.Model.extend({});
var app_state = new AppState();

然后,流派列表视图将监听点击事件(正如您已经拥有的那样),并在有人更改时在应用程序状态模型上设置当前流派:

var Genres = Backbone.View.extend({
    //...
    choose: function(ev) {
        // This would be the click handler for the genre,
        // `.html()` is just for demonstration purposes, you'd
        // probably use a data attribute in real life.
        app_state.set({genre: $(ev.target).html() });
    },
});

个别流派的视图会听取"change:genre"应用程序状态模型上的事件并随着类型的变化做出反应:

var Genre = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'change_genre');
        app_state.on('change:genre', this.change_genre);
    },
    //...
    change_genre: function() {
        // Refill the genre display...
    }
});

Demo: http://jsfiddle.net/ambiguously/mwBKm/1/

您可以为您想要的任何数据创建模型,并且模型是在 Backbone 中处理数据事件的便捷方式。作为一个额外的好处,这种方法使得持久化应用程序的状态变得相当容易:只需将通常的 Backbone 持久化支持添加到AppState然后你就走吧。


如果您只需要一个简单的事件总线来推送非数据事件,您可以使用 Backbone 的Events构建简单事件聚合器的方法:

app.events = _.extend({}, Backbone.Events);

然后,假设您有一个全局app命名空间,你可以这样说:

app.events.on('some-event', some_function);

and

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

如何让一个视图知道另一个视图的变化? 的相关文章

  • Coffee HAML 中的部分内容 (.hamlc)

    我在 Rails 后端使用backbone js哈姆咖啡 https github com netzpirat haml coffee 它是由haml 咖啡 资产 https github com netzpirat haml coffee
  • 骨干木偶区域显示无渲染

    是否可以将已渲染的视图放入骨干牵线木偶区域而无需再次渲染 例如 region show myView This will call render on myView 我不希望该区域再次呈现我的视图 If I do region attach
  • 在骨干模型上声明变量而不设置默认值

    我刚刚开始使用backbone js 我正在寻找一种在模型上声明字段而无需提供默认值的方法 它实际上仅供参考 以便当我开始创建实例时 我可以看到需要初始化哪些字段 用java之类的东西我会写 public class CartLine St
  • 保护我的 Node.js 应用程序的 REST API 安全?

    我可以在 REST API 上获得一些帮助 我正在编写一个 Node js 应用程序 它使用 Express MongoDB 并在客户端使用 Backbone js 在过去的两天里 我一直在努力解决所有这些问题 但运气不佳 我已经查过了 保
  • 如果 cookie 未发送到服务器,则可以安全地将访问令牌存储在客户端 cookie 中

    我正在开发一个主干应用程序 其中包含 Laravel 后端的 REST api 这意味着我使用从社交媒体 例如 Facebook Google 等 收到的访问令牌对每个请求进行身份验证 我的计划是存储用 Javascript 生成的客户端
  • Backbone.View“el”混淆

    视图应该如何el被处理 必须设置它 否则事件不会触发 请参阅here https stackoverflow com questions 4909564 backbone js why isnt this event bound 但它应该是
  • 使用 Rivets.js 迭代 Backbone.js 模型的集合?

    我在用着铆钉 js http rivetsjs com 对于 Backbone 项目中的两个双向数据绑定 并且希望实现迭代绑定 文档表明迭代绑定是可能的 但没有可用的示例 我正在使用一个简单的 Rails API 将 JSON 发送到客户端
  • 渐进增强 - Node.js、Backbone.js

    Node js 服务器有两个角色 前缀为 api 的路由上的 RESTFul API 在其他路线上呈现网站页面 plans features terms 目前 我的所有页面都会呈现一个 正在加载页面 并与 Backbone router 启
  • “Backbone.js 视图”中的单击事件不起作用

    我尝试开始使用backbone js 但我发现当我不使用 body 作为视图的el时 该事件不起作用 这是代码 您可以将其另存为 html 文件并运行
  • 在主干/下划线模板中使用循环

    我有一个backbone js underscore js 模板 我将其输入到主干视图中进行渲染 视图传递一个包含数组的模型posts对象 我称之为post在模板中 Problem 当我尝试循环遍历数组的所有元素时posts 我收到一个错误
  • 如何从 Backbone 集合中提取多个属性?

    我试图从 Backbone 集合中提取多个属性 但它返回undefined 收藏 id 1 name raju age 23 sex male hobbies id 2 name ramesh age 43 sex male hobbies
  • Backbone-relational 无法实例化两个 RelationalModel 对象

    我正在尝试实现 BackboneRelational 并不断获得 无法实例化多个 Backbone RelationalModel 每种类型都有相同的 ID class App Models User extends Backbone Re
  • 如何填充 Backbone.js 集合的 _byId 数组以便我可以在其上使用“get”?

    我有一个收藏 并且collection models返回模型数组 然而 当我打电话时collection get someId 这个id是模型的idcollection models数组 我得到undefined 看着collection
  • 简单的 Backbone 搜索页面 - 您会怎么做?

    我想使用 Backbone 实现一个简单的搜索页面 它不是单页应用程序 但仍然想使用 Backbone 构建我的 JavaScript 代码 搜索页面由搜索表单和搜索结果组成 搜索是通过 AJAX 完成的 并且必须保存在历史记录中 从历史记
  • 如何克隆骨干集合

    有没有办法轻松克隆 Backbone Collection 我想知道为什么没有像模型那样的内置方法 我的问题是我有一个模型包含一组孩子 当我克隆模型时 我仍然有子项的集合 但只有它们的默认值 最简单的方法 var cloned new Ba
  • 大型应用程序的最佳backbone.js和require.js样板[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在为我的应用程序寻找一个好的backbone js require js 样板 因为这将使我很好地
  • 渲染闭合的 Marionette 视图

    关闭的 Marionette 视图在再次渲染时不应该重新委托定义的事件 事件 modelEvents CollectionEvents 吗 似乎我必须在关闭并重新渲染视图后手动调用 delegateEvents 否则视图将无法按预期工作 h
  • jQuery PUT ajax 请求不起作用

    我正在尝试在 couchdb 中保存 Backbone 模型 因此我已经覆盖了save向 couchdb 发出 ajax 请求的方法 ajax type PUT url http 127 0 0 1 5984 movies this get
  • 服务器端MVC+客户端MVC

    一个应用程序既是JS密集型的 又具有复杂的业务逻辑 庞大的数据流 使用backboneJS来构造JavaScript代码 并且还需要服务器端MVC 在本例中是Spring 与客户端 MVC 主干 一起实现服务器端 MVC spring 是一
  • 我应该在客户端和服务器上都使用 MVC 吗?

    我决定在我的网站上使用 MVC 模式 所以 现在我在我的网站上使用 Backbone js 框架 我网站上的所有操作都是ajaxy 所以server只从db获取数据 并将数据保存到db 我是否也需要在服务器端使用 MVC 这让一切都变得复杂

随机推荐

  • C# 泛型类中的协方差

    C 4 0 NET 4 5 Silverlight 5 看起来很奇怪 我找不到解决方案 所以需要一些帮助 我有基类 Base 和派生类 Child Base 我还有帮助程序类 它具有通用类型来执行特定工作 一个 EF 实体帮助程序 其中 T
  • 如何从文件路径中删除%20?

    file home ashu Music Collections randomPicks ipod 20on 20sep 2009 Coldplay Sparks mp3 如何转换像上面这样的字符串以获得可以传递到的正常文件路径open 功
  • 如何使用 mechanize 库执行 HEAD 请求?

    我知道如何使用 httplib 执行 HEAD 请求 但我必须对该站点使用 mechanize 本质上 我需要做的是从标头 文件名 中获取值 而不实际下载文件 有什么建议我可以如何实现这一点吗 Mechanize 本身仅发送 GET 和 P
  • 在 OfficeJS 中,您可以检索绑定对象的范围吗?

    针对 Word Online 但任何针对 Excel PPT 的指示也会有所帮助 本质上 是否可以将绑定对象内的文本视为范围 因此 能够选择全部并将插入符移动到开头 结尾 我设想代码具有以下效果 Office select myBindin
  • 如何从 python 中的另一个 .py 文件访问全局变量?

    我创建了两个文件 当我运行时a py 结果是 1 1 这是正确的 然而 运行b py 结果是没有 我如何获取请求的值b py a py requests def set value global requests requests 1 1
  • 创建一个大的虚拟文件

    我是这个社区的新手 也是 iOS 开发的新手 我希望有人能帮助我解决一些小问题 目前我正在为自己编写一个小应用程序 它应该创建一个非常大的虚拟文件 其中包含虚拟数据或单词或任何使它变大的东西 原因是 我想单击一个按钮 应用程序应该生成一个
  • 使用另一个 data.table 中的值更新 data.table 中的值

    我有一个包含大约 2500 万行的数据集 我正在获取这些行的子集并执行一个运行良好的函数 但是 我接下来需要做的是用新值更新原始数据集中的值 同时保留其余值 我确信这很简单 但我就是无法理解它 这是我正在处理的事情的简化版本 require
  • 无需 AJAX 将 JSON 文件从 jQuery 发送到 PHP

    所以 我是 javascript jquery 的新手 但我已经使用 PHP 足够长的时间了 我知道如何使用 PHP 从输入中获取数据 这非常简单 但是当尝试使用 jQuery 执行相同操作时 如何操作却超出了我的想象 现在我有这个脚本 还
  • JavaScript 中的 PMT

    我正在尝试编写与 EXCEL PMT 函数等效的代码 在 JavaScript 中 公式如下所示 function PMT ir np pv fv ir interest rate per month np number of period
  • nextTriggerDate() 不返回“预期”值,是否有其他方法来获取重复本地通知的下一个触发日期?

    在我的应用程序中 我允许用户安排重复的本地通知 我遇到的问题 基于环顾四周的任何其他问题 是 nextTriggerDate 始终将其返回值基于当前时间而不是安排通知的时间 我看到了在通知的 userInfo 中存储 日期 值的建议 但从通
  • ASP.NET Core 2.0 MVC - 如何从视图编译中排除某些文件夹?

    这是场景 我使用这段代码https iamrufio com 2017 09 08 rendering emails with razorviewengine in net core 2 0 感谢作者 将视图呈现为字符串 用于电子邮件 但是
  • 为什么 Borland 会在不同的 C 文件中使用同一对象的多个定义进行编译,而 GCC 却不会?

    我正在研究全局变量的行为 到目前为止 我认为全局变量的多重定义是一种非法的方式 并且必须得到一个错误 但是我从 Borland C C 编译器得到了意想不到的结果 而 GCC 给了我预期的结果 Code test1 c include
  • 为什么 FirebaseAuth.getInstance().getCurrentUser() 在 android 中返回 null 值

    我正在关注使用firebase发送图像的代码 我已经配置了 firebase 存储 url 数据库 url 数据库规则 true sha1 将 google services json 放置在应用程序文件夹中 但是当我调试代码时 it 用户
  • Apache Airflow 仅向列表中的第一个人发送 SLA 未命中电子邮件

    我使用 Apache Airflow 我希望它能够在 SLA 未命中时发送电子邮件通知 我将电子邮件地址存储为气流变量 并且我有一个 dag 其任务之一使用 EmailOperator 发送电子邮件 问题来了 因为当我向所有收件人运行发送邮
  • 如何在 geo URI Intent 启动的地图中显示标记?

    我有一个应用程序 我想通过启动具有特定地理坐标的 Google 地图来显示不同的位置 一次一个 由用户输入选择 我目前正在使用这个 当然具有真实的纬度和经度值 Intent intent new Intent Intent ACTION V
  • 如何为每个列名添加后缀(或前缀)?

    我想添加 x每个列名称的后缀 如下所示 featuresA myPandasDataFrame columns values x 我该怎么做呢 另外 如果我想添加x 作为后缀 解决方案会如何变化 以下是我认为添加后缀的最好方法 df df
  • 与菜单元素中的右“左三角形”对齐

    我构建 HTML CSS JS 菜单 并希望将箭头向右对齐以指出该元素是子菜单 我的问题是 在 Firefox 中 三角形 符号 显示在下一行而不是当前行 铬在两种情况下都表现良好 BTS中存在与我的情况类似的错误 https bugzil
  • JAI:如何从多页 TIFF 图像容器中提取单页输入流?

    我有一个将 PDF 文档转换为图像的组件 每页一张图像 由于该组件使用转换器生成内存中图像 因此它会对 JVM 堆造成严重影响 并且需要一些时间才能完成转换 我正在尝试提高转换过程的整体性能 并找到了一个具有 JNI 绑定的本机库来将 PD
  • jQuery CSS 悬停

    我有一个 CSS 菜单 当鼠标悬停在它上面时设置父 li 的颜色 它是子 ul 子菜单 基本上 当您将鼠标悬停在菜单上时 它会改变颜色并保持这种状态 直到您将鼠标移开菜单及其子菜单 看起来很好 我添加了一些 jQuery 代码来更改菜单项的
  • 如何让一个视图知道另一个视图的变化?

    假设您正在制作一个音乐库应用程序 您有一个包含流派列表的视图 另一个显示所选流派的内容 当用户单击列表上的流派时 其他视图中的内容应相应更新 为了最大限度地减少依赖性 最好的方法是什么 除了绘制各个流派的视图之外 我还没有找到任何其他地方可