Backbone.js `listento` 不会针对过滤后的集合触发

2024-01-04

listento仅针对全局集合触发,而不是我在创建视图时传递给视图的集合。

例如:

var MyView = Backbone.View.extend({
  initialize: function() {
    this.listenTo(notes, "add", this.test);  // <--- THIS FIRES
    this.listenTo(this.collection, "add", this.test); // <-- THIS DOES NOT FIRE
  },

  test: function() {
    console.log('model added to collection')
  }
});

我在创建视图时传递过滤后的集合,如下所示:

var notesFilteredByGroup = notes.filter_group(123);
var myView = new MyView({
  collection: notesFilteredByGroup
});

这是Notes收藏:

Notes = Backbone.Collection.extend({
  url: '/notes',

  model: Note,

  filter_group: function(groupNum) {
    filtered = this.filter(function(note) {
      return note.get('groupNum') === groupNum;
    });
    return new Notes(filtered);
  }
});

当我提交新笔记时,它会很好地更新全局集合。我该如何告诉notesFilteredById or this.collection监听添加的模型?

EDIT:

添加了请求的代码,更改了一些变量名称以使问题更清晰

注意提交代码:

var AddNoteView = Backbone.View.extend({
  tagName: 'div',

  template: _.template( AddNoteTemplate ),

  events: {
    'click #noteSubmitButton': 'submit'
  },

  initialize: function() {
    this.render();
  },

  render: function() {
    var template = this.template( this.model.toJSON() );
    this.$el.html(template);
    return this;
  },

  submit: function(event) {
    event.preventDefault();

    var newNote = {
      text: $('#text').val(),
      groupNum: $('#groupNum').val(),
    };

    this.collection.create(newNote, {wait: true});
  }
});

实例化 AddNoteView:

var notes = new Notes;
notes.fetch();
var addNoteView = new AddNoteView({
  collection: notes
});

我想你的notes初始化时的全局集合如下所示

var notes = new Notes();

所以这被传递给不同的观点。

但是当你过滤集合时

   var notesFilteredById = notes.filter_id(123);

   ...
   return new Notes(filtered);

您正在返回一个新笔记收藏..

这将创建一个新实例,该实例不具有与全局相同的绑定notes.

因此,为了使其工作,您还必须显式地将创建的模型添加到过滤后的集合中。

像这样的东西

// You need to pass that into the view
var addNoteView = new AddNoteView({
  collection: notes,
  filteredCollection : notesFilteredByGroup
});

在视图中,您需要将其显式添加到其他集合中

var AddNoteView = Backbone.View.extend({
  tagName: 'div',

  template: _.template( AddNoteTemplate ),

  events: {
    'click #noteSubmitButton': 'submit'
  },

  initialize: function() {
    this.listenTo(this.collection, 'add', addToCollection);
    this.render();
  },

  render: function() {
    var template = this.template( this.model.toJSON() );
    this.$el.html(template);
    return this;
  },
  addToCollection : function(model) {
      // Need to add to the other collection.
      this.options.filteredCollection.add(model);
  },
  submit: function(event) {
    event.preventDefault();

    var newNote = {
      text: $('#text').val(),
      groupNum: $('#groupNum').val(),
    };

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

Backbone.js `listento` 不会针对过滤后的集合触发 的相关文章

  • 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
  • 带有通配符的主干事件

    有没有办法监听命名空间的所有事件 所以当我听到这样的事件时 app vent on notification id function type console lof type 它将监听所有这样的事件 app vent trigger no
  • 从 Backbone 检索 Rails/devise current_user

    我有一个应用程序 可以通过 Devise 管理 Rails 的注册 输入 退出 当我登录时 我被重定向到 Backbone 启动的 Dashboard index 我想以某种方式在 Backbone 中检索我的 current user i
  • 使用 $.html() 时如何提高渲染性能

    我正在研究骨干demo app https jsfiddle net o75r7fu9 8 显示推文列表 当我用不同的数据替换所有 推文 时 我使用以下命令清除列表 html render function item table html
  • 保护我的 Node.js 应用程序的 REST API 安全?

    我可以在 REST API 上获得一些帮助 我正在编写一个 Node js 应用程序 它使用 Express MongoDB 并在客户端使用 Backbone js 在过去的两天里 我一直在努力解决所有这些问题 但运气不佳 我已经查过了 保
  • 如何在 Backbone.js 中加载具有外键关系的子模型?

    抱歉 如果这有点复杂 我仍在学习 Backbone js 加载和保存内部具有子模型的 Backbone 模型的正确方法是什么 我什至应该有子模型吗 例如 请原谅咖啡脚本 如果我有类似的东西 class Address extends Bac
  • jQueryMobile:未捕获类型错误:无法调用未定义的方法“_trigger”

    我正在使用 jQuery Mobile 和backbone js 当我加载主页时出现以下错误 Uncaught TypeError Cannot call method trigger of undefined 这就是我加载主页的方法 在r
  • Backbone.View“el”混淆

    视图应该如何el被处理 必须设置它 否则事件不会触发 请参阅here https stackoverflow com questions 4909564 backbone js why isnt this event bound 但它应该是
  • Backbone.Marionette 在路由更改时更改区域

    我的应用程序有一个主区域 有时主区域中会有一些应可通过 URL 访问的子区域 主要区域内容由应用程序路由器的功能更改 因为他知道主要区域 但是子视图中的临时区域呢 例如网址 docs将显示文档链接列表以及 doc id应在列表旁边显示文档的
  • Marionette.View 中 UI 元素的可用性

    我只是想了解 Backbone Marionette 关于 UI 元素的观点背后的决定 在现有 DOM 元素上实例化 Marionette View 时 如下所示 view new Marionette ItemView el elemen
  • “Backbone.js 视图”中的单击事件不起作用

    我尝试开始使用backbone js 但我发现当我不使用 body 作为视图的el时 该事件不起作用 这是代码 您可以将其另存为 html 文件并运行
  • 覆盖主干“设置”方法

    我想重写骨干集方法 以便每当我为骨干模型设置一个值时 都会调用在该属性上注册的回调 而无需检查该属性的相同先前值 var model Backbone Model extend defaults prop1 true var view Ba
  • backbone.js - 如何在视图之间进行通信?

    我有一个带有多个backbone js 视图的单页Web 应用程序 观点有时必须相互沟通 两个例子 当有两种方式视图同时以不同方式呈现集合时 并且对一个视图中的项目的点击必须转发到另一个视图 当用户转换到流程的下一个阶段时 第一个视图将数据
  • 如何克隆骨干集合

    有没有办法轻松克隆 Backbone Collection 我想知道为什么没有像模型那样的内置方法 我的问题是我有一个模型包含一组孩子 当我克隆模型时 我仍然有子项的集合 但只有它们的默认值 最简单的方法 var cloned new Ba
  • 引发一系列事件 Backbone event:name

    extend object Backbone Events object on myalert one function msg document body innerHTML eve1 msg msg name this name con
  • Backbone.Marionette 与 Backbone-Boilerplate

    我是 Backbone 的新手 正在尝试决定如何进行开发 目前我想知道人们什么时候会使用backbone marionette而不是backbone boilerplate 据我所知 Marionette 的规范性更强 但这是大多数人进行开
  • 如何检查侧边栏视图是否已经在主干中渲染?

    通常 用户通过主页进入网站 然后我在那里渲染侧边栏视图 接下来 用户单击链接 路由器呈现另一个视图并替换原始内容视图 侧边栏视图不会重新渲染 当用户在子页面上单击刷新时 侧边栏不会呈现 如何检查视图是否存在并且已渲染 划分责任并坚持下去 不
  • backbone.js:视图中影响集合中不同模型的按钮

    我刚刚开始使用backbone js 到目前为止 我真的很喜欢它 我有这样的事情 ModelA ModelB ViewA ViewB ModelA 持有 ModelB 的集合 如何使用按钮构建模型 B 的视图 单击该按钮会更改集合中下一个
  • 使用 Node.js 的前端 javascript 框架 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • 使用 C# 无法正确更改应用程序图标

    我将应用程序的图标更改为新图标 方法是转到 Project MyProject Properties Icon and Maniferest 然后加载新图标 现在 在我的调试文件夹中 我的 exe 文件的图标出现了新图标 这没关系 但是当我
  • Google App Engine 删除了默认 GCS 存储桶。有办法恢复吗?

    我正在从应用程序的默认存储桶中删除一些文件 并且不小心还使用 gsutil rm 命令删除了存储桶本身 有没有办法恢复 重新创建 恢复它 我想继续使用免费配额而不启用计费 到目前为止我试图做的是 但我不确定它是否正确 我首先启用计费只是为了
  • HTML 表格忽略元素样式宽度

    HTML 表格忽略元素样式宽度 我有一个 HTML 表格 其中某些单元格具有很长的文本内容 我想使用 jQuery 为这些单元格指定宽度 以像素为单位 但渲染的表格只是忽略给定的宽度 有什么方法可以强制表格遵守这个宽度吗 Thanks JS
  • 测量 OpenCV FPS

    我正在寻找一种正确的方法来测量 openCV FPS 我找到了几种方法来做到这一点 但它们都不适合我 我测试过的第一个使用time t 开始和 time t 结束 我认为一旦它返回一个转储的函数作为 fps x 时间图 我真的无法想象 fp
  • 将行号添加到现有 HTML

    我正在尝试向现有的 html 添加行号 行高不等 许多类型的字体大小和图像 每条线看起来像 div div
  • 如何使用适用于 Node.js 的 AWS 开发工具包在 s3 上创建文件夹或密钥?

    我正在使用适用于 Node js 的 AWS 开发工具包在 s3 上创建文件夹或密钥 我在谷歌上搜索 但一无所获 有谁知道如何使用适用于 Node js 的 AWS SDK 在我的存储桶下创建文件夹 如何检查您的存储桶中是否已存在该文件夹
  • 实体组件系统和共享公共基础类型的多个组件

    我正在尝试为我的游戏引擎实现一个简单的 ECS 我知道我的实现并不是严格意义上的 ECS 但我正在重构我的代码以使其更加基于组件 到目前为止 我有以下课程 Entity 它是组件的容器 并且由于我希望我的实体具有相同类型的多个组件 因此它将
  • 具有易失性或锁定的属性

    我有一个带有支持字段的属性 我想使其线程安全 获取和设置 get和set方法除了设置和返回之外没有任何逻辑 我认为有两种方法可以将逻辑封装在属性 self 中 易失性和锁定 我对两者的理解是正确的还是有错误 以下是我的例子 public c
  • Android 上的 MP3 解码

    我们正在为 Android 手机实现一个程序 用于播放来自互联网的音频流 我们所做的大约如下 下载自定义加密格式 解密以获取常规 MP3 数据块 将 MP3 数据解码为内存缓冲区中的原始 PCM 数据 将原始 PCM 数据传送到 Audio
  • 如何根据外部向量过滤表的行?

    1 我在 R 中读取了一个大表 其中包含超过 10000 行和 10 列 2 表的第 3 列包含医院名称 其中一些是重复的 甚至更多 3 我有一个医院名称的向量 例如其中10个有待进一步研究 4 您介意教我如何提取步骤 1 中具有步骤 3
  • Ansible:在角色目录中的目录中调用角色的剧本

    我想塑造我的 ansible 角色和剧本的目录结构 目前我有一个像这样的目录结构 group vars all group one group vars yml group vault yml host vars server1 yml p
  • 如何创建 GS1 DataBar Expanded 条形码?

    我需要创建一个GS1 DataBar Expanded RSS Expanded 条形码使用Code128字体或简单的二进制条形码字体 我知道如何使用应用程序标识符或创建校验和 但我不知道如何对数据进行编码GS1 DataBar Expan
  • Eigen 中的自定义标量类型

    我目前正在尝试设置一个自定义标量类型以与 Eigen3 库一起使用 atm 它是一个简单的包装器double 我已关注https eigen tuxfamily org dox TopicCustomizing CustomScalar h
  • 如何关闭 Cocoa 应用程序中的键盘声音?

    我的方法有问题OpenGL可可应用程序 每次keyUp KeyDown事件被触发 系统声音正在播放 我如何为我的应用程序禁用此逻辑 我有一种不好的预感 由于某种奇怪的原因 我的应用程序可能会将按键视为错误并播放系统警报声音 请帮忙 添加到您
  • 如何让 Python 使用 Mac OS TrustStore 中的 CA 证书?

    我需要在公司内部网上使用自定义根证书并将它们加载到 Mac OS TrustStore KeyChain 中确实解决了所有浏览器和 GUI 应用程序的问题 看来它甚至可以与以下版本一起使用curl随 Mac OS X 一起提供 但它不适用于
  • Google App Engine 的 Memcache (Java) 是全局缓存吗?

    我是 Google App Engine 的新手 最近几天我一直在使用 GAE 的 Memcache 来存储数据来构建一个应用程序 根据我的初步发现 GAE 的 Memcache 似乎不是全局的 让我进一步解释一下 我知道对 GAE 的不同
  • WSS 在 http 上工作吗?

    是否可以通过 http 建立 wss 协议 我在论坛上读到 ws 可以与 http 一起使用 但是 wss 只能与 https 一起使用吗 真的吗 因为我试图在本地主机上的 wamp 上测试它 但不起作用 ws告诉 WebSocket 客户
  • 如何在 Xcode 中创建可重用代码包?

    我正在开发一个 iPhone 应用程序 必须解析 xml 文件才能将它们放入数据库中 我还将在我的应用程序中使用相同的 xml 解析器 以便用户可以导入自己的数据 我想知道如何将这些 xml 解析器提取到捆绑包或库中 以便我可以在我的 iP
  • 如何使用 Android 将 .pdf .doc .txt 文件上传到服务器(mysql 数据库)

    我在将文件上传到服务器时遇到一些困难 我需要知道使用名称值对上传文件的完整代码 听到的是我的 android 代码 我只得到我的文件路径 如何将其上传到服务器 引用为 nameValuePairs add new BasicNameValu
  • Backbone.js `listento` 不会针对过滤后的集合触发

    listento仅针对全局集合触发 而不是我在创建视图时传递给视图的集合 例如 var MyView Backbone View extend initialize function this listenTo notes add this