Backbone.js:过滤集合的正确方法?

2023-11-24

我当前使用的方法是过滤一个集合,它返回一个数组,然后使用

collection.reset(array)

重新填充它。但是,这会修改原始集合,因此我添加了一个名为“originalCollectionArray”的数组,它跟踪集合的初始数组状态。当没有过滤处于活动状态时,我只需使用

collection.reset(originalCollectionArray)

但是,我需要跟踪在真实集合中添加和删除模型的情况,所以我这样做了:

// inside collection
initialize: function(params){
    this.originalCollectionArray = params;
    this.on('add', this.addInOriginal, this);
    this.on('remove', this.removeInOriginal, this);
},
addInOriginal: function(model){
    this.originalCollectionArray.push(model.attributes);
},
removeInOriginal: function(model){
    this.originalTasks = _(this.originalTasks).reject(function(val){
        return val.id == model.get('id');
    });
},
filterBy: function(params){
    this.reset(this.originalCollectionArray, {silent: true});
    var filteredColl = this.filter(function(item){
        // filter code...
    });
    this.reset(filteredColl);
}

当我尝试实现与集合操作相关的其他技巧(例如排序)时,这很快就会变得很麻烦。坦率地说,我的代码看起来有点老套。有没有一种优雅的方法来做到这一点?

Thanks


您可以创建一个集合作为主集合的属性,反映过滤器的状态:

var C = Backbone.Collection.extend({
    initialize: function (models) {
        this.filtered = new Backbone.Collection(models);
        this.on('add', this.refilter);
        this.on('remove', this.refilter);
    },

    filterBy: function (params){
        var filteredColl = this.filter(function(item){
          // ...
        });

        this.filtered.params = params;
        this.filtered.reset(filteredColl);
    },

    refilter: function() {
        this.filterBy(this.filtered.params);
    }
});

无论您应用什么过滤器,父集合都会保留其模型,并且您可以绑定到过滤后的集合以了解何时发生更改。通过在添加和删除事件上进行内部绑定,您可以重新应用过滤器。看http://jsfiddle.net/dQr7X/进行演示。

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

Backbone.js:过滤集合的正确方法? 的相关文章

  • Java - 线程“主”中的异常 java.util.ConcurrentModificationException

    有什么办法可以修改HashMap迭代特定键时的值 下面给出一个示例程序 public static void main String args HashMap
  • 如何从 Backbone 集合中提取多个属性?

    我试图从 Backbone 集合中提取多个属性 但它返回undefined 收藏 id 1 name raju age 23 sex male hobbies id 2 name ramesh age 43 sex male hobbies
  • 获取集合时的 ​​Backbone.js 进度条

    我想在用新内容更新应用程序时显示进度条 我想最好的办法是在集合上调用 fetch 时执行此操作 我获取的内容主要是图像 视频海报等 但我只获取链接 而不是 base64 字符串或大的东西 我想做的是在获取图像链接时用进度条覆盖屏幕 渲染视图
  • 对周围的所有 Node JS 框架/库等感到困惑 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我感觉有点困惑 有很多 Node js 相关 东西 的框架 有人能给我一个概述吗 以下库 框架 其他内容如何相互关联 交互 其中包括什么或
  • 反转 ArrayList 最简单的方法是什么?

    反转这个ArrayList的最简单方法是什么 ArrayList
  • Backbone.js el 不工作

    App Views VideoView Backbone View extend initialize function bindAll this render this model this options model this rend
  • 将不同类型的对象与可比较的对象进行比较

    A java public class A implements Comparable private String id private String name public A String a String b id a name b
  • MarionetteJS:应用程序区域与布局[重复]

    这个问题在这里已经有答案了 我正在阅读最新版本 2 3 0 的文档 它说应用程序区域现已被弃用 应用领域 警告 已弃用 此功能已弃用 而不是使用 应用程序作为视图树的根 您应该使用布局 看法 要将布局视图的范围限制为整个文档 您可以设置 它
  • 如何有一个后备路由来捕获backbone.js中的未知页面

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

    是否可以安全地假设对同一集合的两次迭代将以相同的顺序返回对象 显然 假设集合没有被更改 这取决于集合类型 对于大多数集合来说 答案是 是 然而 这并不能得到保证 集合类型的文档应该指定它是否这样做 但正如大多数人所做的那样 该细节通常被忽视
  • 如何在 Java 中获得列表的反向列表视图?

    我想在列表上有一个反向列表视图 与List sublist提供列表上的子列表视图 是否有一些函数可以提供此功能 我不想复制该列表 也不想修改该列表 在这种情况下 如果我能在列表上至少获得一个反向迭代器就足够了 另外 我知道如何自己实现这一点
  • 将集合绑定到自定义控件属性

    我没有运气尝试将数据集合绑定到我的自定义控件的属性 我已经实现了该控件的字符串属性的机制 在此处提供了一些帮助 并期望集合类型同样简单 但是我无法让它再次工作 这是我的自定义控件视图
  • 限制实体框架中子实体的数量

    底线在前 有没有一种简洁的方法可以限制可以属于实体框架中父级的子实体的数量 我现在使用的是4 3 1 问题 我正在开发一个 ASP NET MVC3 站点 它通过使用实体框架的数据访问层访问数据 我有一个 SearchList 实体 它与搜
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • 引发一系列事件 Backbone event:name

    extend object Backbone Events object on myalert one function msg document body innerHTML eve1 msg msg name this name con
  • Backbone.js 模型或视图中的类私有属性

    模型中是否可以拥有私有属性 就像 构造函数 函数中本地声明的变量一样 不附加到this 但仅在 构造函数 函数中定义的内容在本地声明且可见 没有 BB 视图的示例 function MyView aModel var internalInp
  • 在 Node js 应用程序中加载backbone.js

    我正在使用node js 和backbone 来构建网络应用程序 Backbone 是我的软件包要求的一部分 我之前使用过 Rails 和 Backbone 辅助 gem 非常适合将需要到达客户端的所有资产 js 文件 拼凑在一起 话虽如此
  • Java 使用函子连接集合

    给定 2 个具有相同数量元素的集合 例如List
  • 从 SortedList 或 SortedDictionary 获取第 i 个值

    我有一个排序的对象集合 它可以是 SortedList 或 SortedDictionary 我将主要使用它来阅读 因此增加性能并不那么重要 我怎样才能得到第i个值 所以例如当我的集合中有数字 1 2 3 4 5 并且我想要中位数 本例中为
  • Scala 条件列表构造

    我正在使用 Scala 2 9 2 并且想根据某些条件构建一个列表 考虑以下情况 其中 cond 是采用谓词 p 和类型 T 的值 在本例中为 t3 的某个函数 t1 t2 cond p t3 t4 我想要的行为如下 如果 p 为真 则应给

随机推荐

  • 如何从代码隐藏中清除所有表单字段?

    HTML 有一种输入按钮类型 可以一步将表单中的所有字段重置为其初始状态
  • 如何使用JPA删除连接表中的行

    我有以下模型 一篇文章可以有一些标签 并且一些文章上可以有一个标签 所以它是与 3 个表的多对多关系 ARTICLE ARTICLE TAG TAG 当我删除标签时 我想删除 TAG 中的标签 该标签与 ARTICLE TAG 中标记的文章
  • 删除 DialogFragment 的正确方法:dismiss() 或 transaction.remove()?

    由于以下原因 我仍然遇到问题DialogFragment用于我的主要活动 我目前正在使用此代码来删除它 FragmentTransaction transaction getFragmentManager beginTransaction
  • 如何在 python 中使用 imaplib 获取电子邮件正文?

    我想从 IMAP4 服务器获取整个邮件 在 python 文档中 如果发现这段代码有效 gt gt gt t data M fetch 1 RFC822 gt gt gt body data 0 1 我想知道我是否始终可以相信 data 0
  • 如何在 Java 5 中屏蔽密码?

    我正在尝试用 Java 屏蔽密码 Sun java 建议了一种屏蔽密码的方法 如下所示 屏蔽密码 它使用一种简单的方法来做到这一点 public void run stop true while stop System out print
  • 使用自定义 AuthorizeAttribute 生成返回 URL

    我有一个自定义授权属性 using System using System Web Mvc using System Web Routing AttributeUsage AttributeTargets Class AttributeTa
  • 预取示例?

    任何人都可以给出一个示例或使用示例的链接 builtin prefetch在 GCC 或一般的 asm 指令 prefetcht0 中获得显着的性能优势 特别是 我希望该示例满足以下标准 这是一个简单 小型 独立的示例 删除 builtin
  • 角度/打字稿中的顺序代码执行

    如何让我的代码按顺序运行 例如 如果我有一个从服务获取一些数据的 for 循环 我想要n 1迭代仅在之后运行nth迭代已完成 我希望循环后的代码仅在 for 循环完成所有交互后才执行 示例代码 someMethod for var i 0
  • ChartJS 显示时间数据的差距

    我有这个图表 这是用 ChartJS 构建的 但是 在下午 1 点到 5 30 之间 没有数据 我想要图表做的就是显示没有数据 而不是连接两个点 这可以做到吗 理论上 我每 5 秒就有一个新值 但这可能会减少 所以我想我需要能够设置连接间隙
  • 如何在 sqlite.net PCL 中使用 InsertOrReplace?

    我正在使用这里的 sqlite net 的 PCL 版本 https github com oysteinkrog SQLite Net PCL 这是我的简单课程 public class LogEntry PrimaryKey AutoI
  • 非阻塞 API 是如何工作的?

    我一直在读Play 框架文档并发现这句话令人困惑 请注意 您可能会因此将阻塞代码包装在 期货 这并不意味着它是非阻塞的 它只是意味着 阻塞将发生在不同的线程中 你还需要做 确保您使用的线程池有足够的线程 处理阻塞 我的印象是所有这些非阻塞库
  • Swift 语言多播委托

    我正在尝试在 Swift 中实现多播委托功能 在 Objective C 中 我们有这个优秀的实现 https github com robbiehanson XMPPFramework blob master Utilities GCDM
  • 非托管内存未显示在任务管理器中

    我写了以下测试 实际上在更广泛的上下文中使用 IntPtr x Marshal AllocHGlobal 100000000 Console Write Press any key to continue Console ReadKey t
  • 关于配置首选项和js

    我想知道是否可以使用 javascript 获取 about config 中设置的某些首选项的值 动机是当用户登陆插件前端时获取我创建的 Firefox 插件中设置的首选项的值 基本上 我试图识别登陆 FE 的用户 而不要求他们明确登录
  • 如何通过 web.config 将 http 重定向到 https,将 www 重定向到非 www? [复制]

    这个问题在这里已经有答案了 我想使用 web config 将我的 ASP NET 站点上的所有请求重定向到 https 不含 www 那是 http http www https www 都应该去 https 到目前为止 我的 web c
  • 角度 - 垫子滑动切换不可见

    problem mat slide toggle 不可见 我正在尝试从下面的网址实现这个示例https material angular io components autocomplete examples 测试组件 html
  • 如何在客户端将自定义 ValidationAttribute 呈现为“da​​ta-val-xx”属性?

    给定一个如下所示的 ViewModel public class Login Required public string Username get set Required CustomValidator public string Pa
  • Angular 2滚动到底部(聊天风格)

    我有一组单细胞组件ng for loop 我已经一切就绪 但我似乎无法找出正确的 目前我有 setTimeout gt scrollToBottom 但这并不总是有效 因为图像异步地将视口向下推 在 Angular 2 中滚动到聊天窗口底部
  • 缩放存储在 S3 中的图像

    我面临的情况是 我需要将多个网站的图像存储推送到可以无限扩展的服务 S3 CloudFiles 等 到目前为止 我们已经能够允许用户在 Python 的图像库的帮助下动态生成自定义缩略图大小sorl 缩略图在姜戈 通过将我们的图像移动到 S
  • Backbone.js:过滤集合的正确方法?

    我当前使用的方法是过滤一个集合 它返回一个数组 然后使用 collection reset array 重新填充它 但是 这会修改原始集合 因此我添加了一个名为 originalCollectionArray 的数组 它跟踪集合的初始数组状