同一个父辈下的2个看似独立的观点该如何互动

2024-03-10

请考虑以下场景:

<ParentView>
     <FilterSubview></FilterSubview>
     <ListSubview></ListSubview>
</ParentView>

举个例子:我有一个视图,它依次显示带有过滤器的视图(用户可以选择显示书籍、杂志或两者)和包含项目的列表。 过滤器和列表都有对应的模型。过滤器——我们可以过滤什么。列表 - 所有项目的列表。

使用案例:用户看到完整列表,然后可以通过仅选择所需的类别来过滤结果。

问题:

  • 这两种观点应该如何相互作用?他们应该互相了解还是应该由父视图处理?
  • 谁应该存储过滤列表以供显示?它可以直接是列表子视图模型,或者父视图可以过滤完整列表,然后将其传递给渲染。

你的问题没有一个正确的答案,但我会尝试在这里解释一种常见的、惯用的方式。

两个兄弟视图不应该互相了解。相反,他们应该通过某种中介者通过事件进行交互。因为在你的情况下FilterView and ListSubView共享一个共同的父视图,负责渲染它们,您可以让父视图调解事件:

var ParentView = Backbone.View.extend({
  initialize: function() {
      this.listenTo(this.filterView, "filter", this.filterChanged);
  },
  filterChanged: function(filterValue) {
      this.listSubView.filter(filterValue);
  }
});

var FilterView = Backbone.View.extend({
  events: {
      "change .filter" : "filterValueChanged"
  },
  filterValueChanged: function() {
      var filterValue = //get filter value...
      this.trigger("filter", filterValue);
  }
});

或者(最好甚至)你可以省去中间人并使用Mediator http://addyosmani.com/largescalejavascript/#mediatorpattern图案。为此,您需要第三个组件,其工作是在互不相识的各方之间传递消息。如果您使用的是 Backbone 0.9.9,则内置了这样一个中介器:Backbone为此,根对象充当全局事件总线。

So:

//ListSubView
this.listenTo(Backbone, "listfilterchanged", this.filterChanged);

//FilterView
Backbone.trigger("listfilterchanged", filterValue);

接下来的问题是谁应该对列表数据负责。我倾向于让最专业的组件来负责,但这样只有one组件负责。在你的情况下,这意味着ListSubView应该管理过滤列表,但前提是ParentView不需要对其进行操作。但这只是一个概括,因此请持保留态度,并根据您的情况采取适合您的做法。

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

同一个父辈下的2个看似独立的观点该如何互动 的相关文章

  • 销毁 Backbone 集合中每个模型的最简洁方法?

    第一次尝试时我写了 this collection each function element element destroy 这不起作用 因为它类似于ConcurrentModificationException在 Java 中 所有其他
  • 在 Backbone 渲染方法中调用 jQuery 插件

    我在 Backbone 中有一个渲染方法 基本上是这样的 render function tmpl this template attrs appendTo this el return this 这是从路由器操作中调用的 action f
  • 扩展 React.js 组件

    我最欣赏 Backbone js 的事情之一是继承的工作方式简单而优雅 我开始掌握 React 但在 React 中找不到任何类似于此 Backbone 代码的内容 var Vehicle Backbone View extend meth
  • Backbone 对象渲染没有方法 apply - 绑定问题

    所以我在我的 AppView 中这样做 var flowerModel new app DataModel title flower values tulip rose dandelion dataToShow tulip rose dan
  • 主干+rails TypeError:List.Header不是构造函数

    我正在尝试按照从该网站购买的教程进行操作 http www backbonerails com http www backbonerails com 我正在关注该系列的第五集 起床运行 第 1 部分 在视频的 46 52 左右 他有 lis
  • 在Javascript中,这个下划线是什么意思?

    var Gallery Backbone Controller extend index null photos null album null subalbums null subphotos null data null photosv
  • Backbone:同一模型的多个视图模型

    新手骨干问题 背景 建立一个有骨干的购物清单 我有一个名为名称 描述和标签 数组 属性的模型类 我想基于此模型或此模型的集合创建两个视图 第一个视图将显示所有项目 如下所示 ul li h3 Item 1 Name h3 p Item 1
  • 使用 $(function 等启动 javascript 代码

    我正在研究 Backbone 和来自的待办事项示例应用程序http todomvc com http todomvc com 我注意到有 3 种方法可以在文件中启动代码 function code here function code he
  • 如果用户尚未登录,我如何拒绝他们访问我的 Backbone 应用程序的部分内容?

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

    我将 NET MVC 用于所有服务器端逻辑并提供初始页面 但我的应用程序在客户端非常繁重 因此我采用了 Backbone JS 事实证明它非常有用 但我不确定如何构建我的系统以整合这两种技术 在我看来 我有两个选择 在服务器端从 MVC 中
  • 类型错误:“未定义”不是函数(评估“sinon.spy()”)

    我正在尝试使用sinon js http sinonjs org 在测试骨干应用程序时 但不幸的是 由于错误 我无法使用间谍方法 TypeError undefined is not a function evaluating sinon
  • Rails:backbone-on-rails gem-

    尝试按照 Ryan Bates Backbone js 教程构建抽奖应用程序 但我已经遇到了第一部分代码的问题 在 application js 的 init 函数中 他初始化了 Raffler 路线的新实例 该实例应该触发警报 主页 但我
  • Backbone js 并使用 fetch() 用数据填充模型

    我正在 Backbone js 中工作 并尝试使用 fetch 用数据填充模型 问题是提取似乎有效 但我的模型没有填充数据 代码片段 Backbone emulateHTTP true Backbone emulateJSON true C
  • 使用 bootstrap-modal 作为 Backbone.js 视图

    我正在尝试创建一个基于 Twitter 引导模式的 Backbone js 视图 该视图通过以下方式使用 Backbone 的自动事件委托 events视图的属性 不幸的是 bootstrap modal 似乎破坏了 Backbone 的事
  • 车把模板的文件扩展名

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

    Node js 服务器有两个角色 前缀为 api 的路由上的 RESTFul API 在其他路线上呈现网站页面 plans features terms 目前 我的所有页面都会呈现一个 正在加载页面 并与 Backbone router 启
  • 覆盖主干“设置”方法

    我想重写骨干集方法 以便每当我为骨干模型设置一个值时 都会调用在该属性上注册的回调 而无需检查该属性的相同先前值 var model Backbone Model extend defaults prop1 true var view Ba
  • 覆盖骨干模型更改事件

    我认为我想做的事情很简单 我只是不知道该怎么做 当我的模型属性之一发生更改以便将一些数据传递给事件处理程序时 无论更改是值的增加还是减少 我想触发我自己的事件 基本上我希望我的处理程序在视图中执行此操作 handler function i
  • 如何将参数传递给backbone.js 中事件对象中绑定的函数

    我需要为 Backbone 中的事件对象中使用的函数提供参数 var DocumentRow Backbone View extend tagName li className document row events click icon
  • 如何有一个后备路由来捕获backbone.js中的未知页面

    我设置了一组如下所示的路线 routes home home home page home 我想知道的是 如何配置路由 以便如果用户请求未知页面 我可以轻松重定向到静态 404 html 页面 在您的路由器中 例如前两条路由 routes

随机推荐

  • Weblogic 10.3 spring 3.1.0 jsp 编译问题

    我的 warfile 的 web inf lib 文件夹中有 spring webmvc 3 1 0 release 版本 但是当应用程序部署到 weblogic 时 我收到编译错误 weblogic 使用 spring 2 x 版本 该版
  • javascript:从字符串创建 HTMLElement

    我想通过 javasacript 从字符串创建 HTMLElement 如下所示 element createHTMLElement table class list tr td a href xxx title a td tr table
  • 如何在 jQuery 验证中添加带有消息的验证规则?

    我已经尝试过下面的代码 但无法收到错误消息 var v jQuery account info validate errorLabelContainer result submitHandler function form jQuery f
  • PL/SQL 块问题:未找到数据错误

    SET SERVEROUTPUT ON DECLARE v student id NUMBER sv student id v section id NUMBER 89 v final grade NUMBER v letter grade
  • 错误 MSB4185:“System.Globalization.CultureInfo”尚未启用执行

    当尝试使用 Mono for Android 在 MonoDevelop 中构建时 我收到此错误 根据调试 它不在我的代码中 所以我一无所知 任何想法 错误 MSB4185 类型上的函数 CurrentUICulture System Gl
  • ASP.NET Webforms 和 MVC 3 中的成员资格提供程序之间的区别

    Webforms 的 Membership Provider 和 MVC 3 的 Membership Provider 之间的工作方式有区别吗 No 会员资格提供商是System Web Security名称空间 网络表格是System
  • Kafka MirrorMaker2 自动消费者偏移同步

    我正在使用 MirrorMaker2 进行灾难恢复 Kafka 2 7应该支持自动消费者偏移同步 https cwiki apache org confluence display KAFKA KIP 545 support automat
  • CHAR_BIT=4 是 C 标准授权的可能值吗?

    我正在考虑一个非常具体的 现在无用的 处理器 称为saturn http en wikipedia org wiki HP Saturn 28microprocessor 29 该CPU的一个奇怪的特点是它的元素单位是半字节 4位 而不是字
  • C++ 获取 Process.GetCurrentProcess().SessionId

    在c 中 我们可以在Windows中使用此方法获取当前用户进程IDProcess GetCurrentProcess SessionId 我们如何在 C 中做到这一点 Call 获取当前进程ID https msdn microsoft c
  • 如何在上传前检查 iOS 应用程序大小 [重复]

    这个问题在这里已经有答案了 我希望能够在提交到应用程序商店之前检查我的应用程序的大小 更具体地说 我需要知道它是否会低于神奇的 20 MB 以允许蜂窝下载 因为该应用程序是为节日而创建的 这个问题很老了 但在我看来仍然相关 以下是我上传应用
  • 使用 PHP 检查 IPv4/IPv6 地址是否已启动

    我有一个 IPv4 地址 前任 172 19 20 21 我曾经这样做过 fs fsockopen ip port errno errstr 3 if fs error SSC is down return Redirect to gt w
  • ListGetAt 解析 CSV 文件时出现问题

    我有一个脚本 它从客户端读取 CSV 文件 并将这些值拆分为稍后将输入数据库的变量 这是当 CSV 中的列数少于所需的最小值时出现的错误 In function ListGetAt list index delimiters the val
  • 在python中手动绘制树状图

    我已经实现了一种算法来解决图中的聚类问题 我使用 python 库 python graph 来表示该图 现在 在计算的每一步 算法是迭代的 我必须绘制树状图的一部分 事实上 该算法是分裂的 从原始图开始计算簇的意义上来说 现在 我不知道用
  • “gprof”在特定代码行上花费的时间

    我一直在使用gprof分析器结合g 我的代码中有一个函数 它封装了与主要函数足够相关的几个行为部分 因此将它们分成自己的函数是没有意义的 我想知道在每个代码区域花费了多少时间 所以 如果你想象代码看起来像 function A A A B
  • C: IFS System() 漏洞

    出于教育原因 我必须利用 C 代码 该程序首先设置了egid 然后设置了漏洞system usr bin 命令 所以我在我的主目录中创建了一个 usr 可执行文件 并将路径设置为主目录PATH HOME PATH 我想将 bash 中的 I
  • 如何从字符串末尾获取数字

    我对 Ruby 还是个新手 有点卡住了 我需要从字符串末尾获取一个数字 假设我有字符串 potato85 我需要 85 数字中的位数可以有所不同 例如 potato8 potato8585 有什么方法可以分割字符串并获取第一部分和数字吗 使
  • JSON 概念与 JavaScript 和 PHP

    我需要有人来阐明这个问题 当一个人进行 AJAX 调用时 会调用一个 php 脚本 该脚本会回显 json encode 内容 以便 javascript 可以对其进行处理 注意 假设我们在 php 脚本中将 header 设置为 json
  • pudb调试器可以在windows上使用吗?

    我们有可能pudb http pypi python org pypi pudbWindows 上的 python 调试器 如果是 您如何安装并运行它 当我尝试使用安装它时ez setup http peak telecommunity c
  • ruby 如何处理 + 运算符?

    Ruby 不支持递增变量 例如variable 我看到这种行为 2 4 gives 6 事实上 任意数量的 两个变量之间的符号被视为一个单一的 ruby 是如何做到这一点的呢 既然 ruby 这样做了 是否可以将其视为不可用的原因 操作员
  • 同一个父辈下的2个看似独立的观点该如何互动

    请考虑以下场景