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` 不会针对过滤后的集合触发 的相关文章

  • 如何在 Backbone.js 中加载具有外键关系的子模型?

    抱歉 如果这有点复杂 我仍在学习 Backbone js 加载和保存内部具有子模型的 Backbone 模型的正确方法是什么 我什至应该有子模型吗 例如 请原谅咖啡脚本 如果我有类似的东西 class Address extends Bac
  • 避免从主干视图重新渲染图像和其他内容

    当我重新渲染主干视图时 有什么好方法可以跳过重新渲染图像和谷歌地图等内容 每次重新渲染视图时 我的照片和地图视图都会闪烁得很厉害 这种情况很常见 特别是对于图像 模板引擎从头开始布局布局 这会导致图像标记再次从服务器或从缓存中获取位图 当然
  • Rails:backbone-on-rails gem-

    尝试按照 Ryan Bates Backbone js 教程构建抽奖应用程序 但我已经遇到了第一部分代码的问题 在 application js 的 init 函数中 他初始化了 Raffler 路线的新实例 该实例应该触发警报 主页 但我
  • Backbone.Marionette 在路由更改时更改区域

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

    我对 Backbone js Marionette js 中的路由有三个问题 1 如何获取我的应用程序路由器已注册的所有路由的列表 例如对于 Express js 在 Node js 中 它将是app routes 我尝试对 Backbon
  • 使用 Rivets.js 迭代 Backbone.js 模型的集合?

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

    有没有像backbone js这样的东西的替代品 它为你的前端javascript提供了一些框架 结构 但没有任何不需要的依赖项 并且与jQuery更紧密地结合在一起 您需要一个易于使用的 MVC 框架吗 因为Sammy js http s
  • backbone.js + require.js + 用户认证

    开始学习backbone js和require js 不确定如何通过用户身份验证构建 Web 应用程序的文件 看起来应该是这样的 On app init query server to check auth session state Q
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l
  • 如何克隆骨干集合

    有没有办法轻松克隆 Backbone Collection 我想知道为什么没有像模型那样的内置方法 我的问题是我有一个模型包含一组孩子 当我克隆模型时 我仍然有子项的集合 但只有它们的默认值 最简单的方法 var cloned new Ba
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • 在 Node js 应用程序中加载backbone.js

    我正在使用node js 和backbone 来构建网络应用程序 Backbone 是我的软件包要求的一部分 我之前使用过 Rails 和 Backbone 辅助 gem 非常适合将需要到达客户端的所有资产 js 文件 拼凑在一起 话虽如此
  • Marionette CompositeView 为 Collection 中的每个模型呈现自身,而不是 ItemView (Marionette Rails)

    基本上 我试图将 CompositeView 渲染为带有表头的简单四列列表 其中集合中的每个模型都渲染为 并附加到 我正在跟进德里克的一个例子 http jsfiddle net derickbailey me4NK 非常接近 只有一点点变
  • 获取钛合金中点击的TableRow的ID?

    我是 Titanium 和 Backbone 的新手 我以前使用过 JS 框架 最熟悉 Knockout js 但 Backbone 及其与 Alloy 的工作方式需要一些时间来适应 我想做一些非常简单的事情 我有一个绑定到 TableVi
  • 使用 Node.js 的前端 javascript 框架 [关闭]

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

    使用 Backbone js 我知道强烈建议使用以下方法设置模型的属性set http documentcloud github com backbone Model set方法 而不是直接修改属性内部哈希 http documentclo
  • 服务器端MVC+客户端MVC

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

    我想显示加载消息 图标 直到列表中的所有项目都已呈现 这是我的示例中的 jsfiddle http jsfiddle net 9R9zU 58 http jsfiddle net 9R9zU 58 我尝试在 Feed 部分添加一个带有加载栏
  • 忽略下划线模板中未定义的数据/变量

    仍在学习骨干 所以请耐心等待 我正在尝试向视图添加一个带有空白字段的新模型 但我创建的模板有一大堆
  • 您的backbone.js 项目的最佳实践是什么?

    尽管我已经关注backbone js 几个月了 并且学习了大量教程 但我仍然对在更大的项目中使用backbone 或我的相关技能 没有足够的信心 我的经验是 backbone js 教程的质量差异很大 有些已经过时了 尤其是backbone

随机推荐

  • 使用 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