在嵌套对象内搜索文本(以 Backbone.js 集合为例)

2024-02-04

我有一个backbone.js 集合,我需要在其中进行全文搜索。我手头的工具如下:

Backbone.js、下划线.js、jQuery

对于那些不熟悉主干的人:

骨干集合只是一个对象。在集合内有一个包含模型的数组。每个模型都有一个带有属性的数组。我必须在每个属性中搜索字符串。

我为此使用的代码是:

query = 'some user input';

query = $.trim(query);
query = query.replace(/ /gi, '|');

var pattern = new RegExp(query, "i");

// this.collection.forEach is the same as _.each
// only it get's the models from the collection
this.collection.forEach(function(model) {
    var check = true;
    _.each(model.attributes, function(attr){
        if(pattern.test(attr) && check){
            // Do something with the matched item
            check = false;
        }
    }, this);
}, this);

也许我正在使用的工具之一有更好的方法来处理这个问题?


Backbone 将很多下划线方法扩展到Collection类,这样你就可以摆脱一些东西。实际上,您可能想将其作为一种方法在集合本身上实现,那么我可能会使用良好的老式方法来查看这些键for循环,特别是如果我想打破它。

// in Backbone.Collection.extend
search: function( query, callback ){
  var pattern = new RegExp( $.trim( query ).replace( / /gi, '|' ), "i");
  var collection = this;
  collection.each(function(model) {
      for( k in model.attributes ){
        if( model.attributes.hasOwnProperty(k) && pattern.test(model.attributes[k]) ){ 
          callback.call( collection, model, k ); 
          break; // ends the for loop.
        }
      }
  });

}

// later
collection.search('foo', function( model, attr ){
  console.log('found foo in '+model.cid+' attribute '+attr);
});

也就是说,这只会返回集合中的第一个匹配项。您可能更喜欢以 [模型,属性] 对形式返回结果数组的实现。

// in Backbone.Collection.extend
search: function( query, callback ){
  var matches = [];
  var pattern = new RegExp( $.trim( query ).replace( / /gi, '|' ), "i");
  this.each(function(model) {
      for( k in model.attributes ){
        if( model.attributes.hasOwnProperty(k) && pattern.test(model.attributes[k]) ){ 
          matches.push([model, k]);
        }
      }
  });
  callback.call( this, matches );
}

// later
collection.search('foo', function( matches ){
  _.each(matches, function(match){
    console.log('found foo in '+match[0].cid+' attribute '+match[1]);
  });
});

或者,如果您想要一组匹配但不关心哪个属性匹配的模型,您可以使用filter

// in Backbone.Collection.extend
search: function( query, callback ){
  var pattern = new RegExp( $.trim( query ).replace( / /gi, '|' ), "i");
  callback.call( this, this.filter(function( model ){ 
    for( k in model.attributes ){ 
      if( model.attributes.hasOwnProperty(k) && pattern.test(k) ) 
        return true;
    }
  }));
}

// later
collection.search('foo', function( matches ){
  _.each(matches, function(match){
    console.log('found foo in '+match[0].cid+' somewhere');
  });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在嵌套对象内搜索文本(以 Backbone.js 集合为例) 的相关文章

  • jQuery如何让Enter(Return)通过输入文本字段充当Tab键但最终触发提交按钮

    我已经屏蔽了 Enter 返回 键 实际上 将其转换为 Tab 键 因此 当在输入文本字段内按下时 它充当 Tab 键 这很好 但我需要它在最后一个字段中按下时触发提交按钮 下面是 Enter 键突变的代码 input keydown fu
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 未捕获的引用错误:myFunction 未定义[重复]

    这个问题在这里已经有答案了 这到底是怎么回事 http jsfiddle net sVT54 http jsfiddle net sVT54
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 将杂散文本包裹在 div 中

    如何选择 任何没有包含标签的内容 来在 jQuery 中添加包装器 前任 div class post div class whatever This should remain untouched div I want to wrap t
  • 选中复选框时提交表单

    有没有办法在选中复选框时提交表单
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 如何在jQuery datetimepicker中获取UTC时间

    我正在使用尝试这个jQuery 日期时间选择器 http trentrichardson com examples timepicker 获取日期和时间数据 我能够得到大部分内容 格式 显示等 但是 我无法获取 UTC 格式的日期和时间 我
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • ES6 模板文字的延迟执行

    我正在玩新的ES6 模板文字 http tc39wiki calculist org es6 template strings 我首先想到的是String format对于 JavaScript 所以我开始实现一个原型 String pro
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 有没有非常轻的灯箱? [关闭]

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

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定

随机推荐

  • BeautifulSoup:只要进入标签内部,无论有多少个封闭标签

    我正在尝试从 中删除所有内部 html p 使用 BeautifulSoup 的网页中的元素 有内部标签 但我不在乎 我只想获取内部文本 例如 对于 p p Red p p i Blue i p p Yellow p p Light b g
  • 如何将 utf16 ushort 数组转换为 utf8 std::string?

    目前我正在编写一个插件 它只是现有库的包装器 插件的主机向我传递一个 utf 16 格式的字符串 定义如下 typedef 无符号短 PA Unichar 并且包装的库仅接受 const char 或 std string utf 8 格式
  • 使用 c++ std::unique_ptr<> 或 std::shared_ptr<> 管理 Objective-C 对象

    Objective C 可以在某种程度上与 C 混合 可以互相打电话 https stackoverflow com q 1061005 1792701 但 Objective C 对象仍然或多或少是手动管理的 并且 RAII 习惯用法在该
  • 有没有一种非常简单的方法来处理 EDIFACT(例如 D96A)?

    我们是一家使用 XML 接口等现代技术的现代化公司 但我们的许多客户希望我们提供 EDIFACT 格式 如 D96A 的电子发票 不 我们不能使用现有的库 因为它们不是用我们的 Navision 软件使用的 C AL 编程语言编写的 因此
  • 使用 google gson 进行 json 对象序列化/反序列化

    我想将 java 对象序列化为 json 或从 json 反序列化 谷歌 gson 更好 让我有A类 class A int x 1 int y 2 然后 如果我调用 new Gson toJson new A 我将得到以下结果 x 1 y
  • Java - 在另一个线程中使用可变对象引用的首选设计?

    public class ObjectA private void foo MutableObject mo new MutableObject Runnable objectB new ObjectB mo new Thread obje
  • 使用 php sdk 在 facebook 中获取访问令牌时出错

    我正在使用的代码 fb new Facebook Facebook app id gt app id app secret gt app secret default graph version gt v2 6 helper fb gt g
  • 动态添加类后,jQuery 悬停处理函数在取消悬停时不起作用[重复]

    这个问题在这里已经有答案了 根据我的研究 我相信以下代码应该有效 我使用 jquery 动态地将图像添加到页面 它从 JSON 文件中提取这些图像 因此我需要使用 jQueryon http api jquery com on 方法来允许此
  • C99 中的易失性语义

    我对我正在编写的一些低级代码有疑问 我需要将对象用作易失性的 但这不一定是我希望将类型声明为易失性的 出于可重用性原因 然而 我可以定义指向结构的限定变体的指针 如下段所述 struct x int bar struct x foobar
  • 如何在express中重定向到post请求

    我正在创建一个登陆页面 点击该页面时会自动触发 Facebook 身份验证流程 但是 我无法自动从索引重定向到signup路线 如何从GET请求给一个POST要求快递 router get function req res redirect
  • 在列表框中搜索

    HI 我正在尝试将文本框放在列表框中进行搜索 我有一个 TextBox SearchText 其中包含以下代码 private void SearchText TextChanged object sender EventArgs e in
  • 如何获取意图服务中的上下文

    场景如下 我有一个 WakefulBroadcastReceiver 它执行以下操作 备份到网络计算机或云端 它设置为在 半夜 当我知道平板电脑可以访问 局域网 备份会将数据存储到实例化 WakefulBroadcastReceiver 的
  • visio 的 vba 编程

    目前 我正在IVR 交互式语音应答 系统工作 要在 IVR 中添加服务 我必须在 visio 中制作流程 该流程具有 IVR 系统卖家提供的预定义形状 形状是用 VBA 编程的 我决定学习VBA来修改预定义的形状 在google中搜索时 它
  • 属性更改时重新构建/重新渲染 Angular2 组件

    如何实施 我的子组件 import Component Input ngOnInit from angular2 core Component selector my component template div In child comp
  • 存储库名称作为 GitHub Action 环境变量?

    如何获取存储库名称 而不是用户或组织 作为 GitHub Actions 中的环境变量 我发现github repository但这包含所有者作为第一部分 如下所示 owner repo Try github event repositor
  • 如何控制 Honeycomb 中的软菜单按钮?

    我有一个应用程序 我想在其中关闭菜单按钮 我正在选择其他人的项目 并且不确定是什么引起了菜单按钮的出现 它没有 做任何事情 有没有办法手动关闭该图标 或者我必须首先找出它被显示的原因 请不要批评寻找解决方法 显然在理想的世界中 我会对代码足
  • C++11 std::bind 和 boost::bind 之间的区别

    两者有什么区别吗 或者我可以安全地替换每次出现的boost bind by std bind在我的代码中 从而消除对Boost的依赖 boost bind 关系运算符重载 http www boost org libs bind bind
  • 为 fa 圆添加边框

    如何给图片添加边框circleFont Awesome 的图标 其实我的结果是 http jsfiddle net 0jhdvj0k http jsfiddle net 0jhdvj0k 边框类似于省略号 而不是圆形边框 table cla
  • Jquery - 更改标签中的文本

    这是标签 有文字 使用 20 公里 使用 jquery 我想将文本 20 Kms 替换为 10 kms 我用手像这样贴上标签 label for applyDistanceSlab 我怎样才能做到这一点 label for applyDis
  • 在嵌套对象内搜索文本(以 Backbone.js 集合为例)

    我有一个backbone js 集合 我需要在其中进行全文搜索 我手头的工具如下 Backbone js 下划线 js jQuery 对于那些不熟悉主干的人 骨干集合只是一个对象 在集合内有一个包含模型的数组 每个模型都有一个带有属性的数组