dijit.Tree搜索和刷新

2024-02-01

我似乎无法弄清楚如何使用 ItemFileWriteStore 和 TreeStoreModel 在 dijit.Tree 中进行搜索。一切都是声明性的,我使用的是 Dojo 1.7.1,这是我到目前为止所拥有的:

<input type="text" dojoType="dijit.form.TextBox" name="search_fruit" id="search_fruit" onclick="search_fruit();">
<!-- store -->
<div data-dojo-id="fruitsStore" data-dojo-type="dojo.data.ItemFileWriteStore" clearOnClose="true" urlPreventCache="true" data-dojo-props='url:"fruits_store.php"'></div>
<!-- model -->
<div data-dojo-id="fruitsModel" data-dojo-type="dijit.tree.TreeStoreModel" data-dojo-props="store:fruitsStore, query:{}"></div>
<!-- tree -->
<div id="fruitsTree" data-dojo-type="dijit.Tree"
     data-dojo-props='"class":"container",
     model:fruitsModel,
     dndController:"dijit.tree.dndSource",
     betweenThreshold:5,
     persist:true'>
</div>

Fruits_store.php 返回的 json 是这样的:

{"identifier":"id",
 "label":"name",
 "items":[{"id":"OYAHQIBVbeORMfBNZXFGOHPdaRMNUdWEDRPASHSVDBSKALKIcBZQ","name":"Fruits","children":[{"id":"bSKSVDdRMRfEFNccfTZbWHSACWbLJZMTNHDVVcYGcTBDcIdKIfYQ","name":"Banana"},{"id":"JYDeLNIGPDBRMcfSTMeERZZEUUIOMNEYYcNCaCQbCMIWOMQdMEZA","name":"Citrus","children":[{"id":"KdDUfEDaKOQMFNJaYbSbAcAPFBBdLALFMIPTFaYSeCaDOFaEPbJQ","name":"Orange"},{"id":"SDWbXWbTWKNJDIfdAdJbbbRWcLZFJHdEWASYDCeFOZYdcZUXJEUQ","name":"Lemon"}]},{"id":"fUdQTEZaIeBIWCHMeBZbPdEWWIQBFbVDbNFfJXNILYeBLbWUFYeQ","name":"Common ","children":[{"id":"MBeIUKReBHbFWPDFACFGWPePcNANPVdQLBBXYaTPRXXcTYRTJLDQ","name":"Apple"}]}]}]}

使用网格而不是树,我的 search_fruit() 函数将如下所示:

function search_fruit() {
  var grid = dijit.byId('grid_fruits');
  grid.query.search_txt = dijit.byId('search_fruit').get('value');
  grid.selection.clear();
  grid.store.close();
  grid._refresh();
}

如何使用树实现相同的效果?谢谢 !


令人耳目一新的dijit.Tree变得有点复杂,因为涉及到一个模型(网格中是内置的,网格组件实现查询功能)

通过商店执行搜索

但是如何搜索,使用时非常简单ItemFileReadStore。语法如下:

myTree.model.store.fetch({
   query: {
      name: 'Oranges'
   },
   onComplete: function(items) { 
     dojo.forEach(items, function(item) { 
        console.log(myTree.model.store.getValue(item, "ID"));
     });
   }
});

仅显示搜索结果

如上所示,商店将获取,完整的有效负载被放入其 _allItemsArray 中,然后商店查询引擎过滤出 fetch 方法的查询参数所告诉的内容。在任何时候,我们都可以在存储上调用 fetch,即使没有发送 json 内容的 XHR - 带有查询参数的 fetch 可以被视为一个简单的过滤器。

Model了解此查询。如果您这样做,它只会创建treeNodes 根据返回的结果填充树store.fetch({query:model.query});

因此,让 _try 设置模型查询并更新树,而不是使用回调发送 store.fetch。

// seing as we are working with a multi-parent tree model (ForestTree), the query Must match a toplevel item or else nothing is shown
myTree.model.query = { name:'Fruits' };
// below method must be implemented to do so runtime
// and note, that the DnD might become invalid
myTree.update(); 

使用来自商店的新 xhr 请求刷新树

您需要按照对待商店的方式进行操作。关闭它,然后重建模型。模型包含所有TreeNodes(在其根节点下)和Tree本身映射了一个需要清除以避免内存泄漏的itemarray。

因此,执行以下步骤将重建树 - 但是此示例没有考虑到,如果您激活了 DnD,则 dndSource/dndContainer 仍将引用旧 DOM,从而“保持活动”之前的 DOMNode 层次结构(隐藏的 ofc) 。

通过告诉模型它的 rootNode 是UNCHECKED,将检查它的子项是否有更改。一旦树完成了它的任务,这又将产生子层次结构_load()

关闭商店(以便商店将执行新的 fetch())。

  this.model.store.clearOnClose = true;
  this.model.store.close();

完全删除 dijit.Tree 中的每个节点

  delete this._itemNodesMap;
  this._itemNodesMap = {};
  this.rootNode.state = "UNCHECKED";
  delete this.model.root.children;
  this.model.root.children = null;

销毁小部件

  this.rootNode.destroyRecursive();

重新创建模型,(再次使用模型)

  this.model.constructor(this.model)

重建树

  this.postMixInProperties();
  this._load();

Creds http://mail.dojotoolkit.org/pipermail/dojo-interest/2010-April/045180.html;就这样,将范围限制在 dijit.Tree 上:

new dijit.Tree({

    // arguments
    ...
    // And additional functionality
    update : function() {
      this.model.store.clearOnClose = true;
      this.model.store.close();
      delete this._itemNodesMap;
      this._itemNodesMap = {};
      this.rootNode.state = "UNCHECKED";
      delete this.model.root.children;
      this.model.root.children = null;
      this.rootNode.destroyRecursive();
      this.model.constructor(this.model)
      this.postMixInProperties();
      this._load();
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dijit.Tree搜索和刷新 的相关文章

  • C++ std::vector 搜索值

    我正在尝试优化std vector 搜索 基于索引的迭代向量并返回与 搜索 条件匹配的元素 struct myObj int id char value std vector
  • 使用 Fortran 进行数组问题的二分查找

    我正在使用 Schaum 的 Fortran 77 编程概要 一书 其中有一个关于使用括号值组方法进行二分搜索的示例 首先这是代码 INTEGER X 100 INTEGER RANGE INTEGER START FINISH PRINT
  • ArrayList 搜索 .net

    以下是存储在我的数组列表中的数据的格式 A Amsterdam B Brussels C Canada 如此等等 我想通过仅传递前几个字符直到 来搜索我的数组列表 因此 如果我有类似 AA Test 的东西 那么我只想通过 AA 来检查它是
  • 检查 Bash 数组中是否存在元素[重复]

    这个问题在这里已经有答案了 我想知道是否有一种有效的方法来检查 Bash 数组中是否存在元素 我正在寻找类似于我可以在Python中做的事情 例如 arr a b c d if d in arr do your thing else do
  • Twitter api - 搜索太复杂?

    知道为什么 Twitter 会抛出这个错误吗 GET https search twitter com search json q Middle 20Tennessee 20State 20Blue 20Raiders 20Florida
  • java 谷歌自定义搜索API

    我正在尝试使用Google 自定义搜索 api 的 java 客户端 http javadoc google api java client googlecode com hg apis customsearch index html但在网
  • Dojo 控制台错误对象为空

    突然间 Dojo 来自 Google CDN 的 1 8 3 抛出空错误 这使得调试变得异常困难 例如 如果我忘记require在使用它之前 我会得到通常的依赖 gt dojo parser parse error ReferenceErr
  • 将默认搜索文本添加到搜索框 html

    我正在努力将 搜索 文本添加到搜索框 我正在努力实现 onfocus 消失文本 And onblur 重新出现文本 到目前为止 我已经实现了这一点 但我必须将其硬编码为 html eg
  • 使 IPTC 数据可搜索

    我对 IPTC 元数据有疑问 是否可以通过 IPTC 元数据 关键字 搜索不在数据库中的图像并显示它们 我将如何执行此操作 我只需要一个基本的想法 我知道 PHP 有 iptcparse 函数 我已经编写了一个函数来获取画廊文件夹和所有子目
  • 在 numpy 数组中查找满足条件的大量连续值

    我在 numpy 数组中加载了一些音频数据 我希望通过查找静音部分 即一段时间内音频幅度低于特定阈值的部分 来对数据进行分段 一个非常简单的方法是这样的 values join 1 if abs x lt SILENCE THRESHOLD
  • 在休眠搜索中使用现有分析器AnalyzerDiscriminator

    Entity Indexed AnalyzerDefs AnalyzerDef name en tokenizer TokenizerDef factory StandardTokenizerFactory class filters To
  • 过滤掉搜索查询的常用词

    是否有任何简单的方法可以通过提取查询中有意义的数据来实现过滤用户的输入 可能是问题 我基本上想过滤掉任何干扰词 这样我就可以向 Google 的搜索 api 发送 干净 的查询 嗯 谷歌不会为你做这个吗 把所有那些脏话发给谷歌 让他们帮你清
  • 如何找到修改文件的最新 git 提交?

    我想找到修改源文件的最新提交 我可以用git blame查看每一行提交的所有日期 但很难准确地看出哪一次提交是最后一次接触文件 如何找到触及 git 存储库中给定文件的最后一次提交 git log https git scm com doc
  • sunspot_rails gem - “ Errno:: ECONNREFUSED (连接被拒绝 - 连接 (2)) ”

    我使用宝石 sunspot railshttps github com outoftime sunspot https github com outoftime sunspot我按照上面的说明做了一切http railscasts com
  • 以编程方式访问字典中任意深度嵌套的值[重复]

    这个问题在这里已经有答案了 我正在编写一个 Python 脚本 其中给出了以下格式的字符串列表 key1 key2 key2 key21 key211 key2 key22 key3 列表中的每个值对应于字典中的一个条目 对于结构如下的条目
  • 使用 dismax 处理程序进行通配符搜索?

    我已成功索引文件 并且希望能够使用通配符进行搜索 我目前正在使用 dismaxRequestHandler QueryType dismax 进行搜索 以便我可以搜索查询的所有字段 像 computer 这样的常规搜索会返回结果 但 com
  • 如何在 iBooks 上搜索桌面 UI

    我想像 iBooks 中那样显示 tableview 的搜索栏 我如何减少搜索栏的宽度以及如何在没有任何背景颜色的情况下显示它 另外 当页面显示时 如何最初隐藏搜索框 我可以想到两个选择 通过子类化 UITextfield 创建您自己的 U
  • 使用php表单更改href链接

    我正在制作一个带有搜索栏的网站 我想让搜索栏在 搜索 并显示结果后具有交互性 所以我希望 href 根据正在使用的 Id 进行更改 例如 有人搜索 Pinecones 如果它在数据库中 它将有一个 ID 在本例中是 4 一旦他们搜索它 它就
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • linux下如何从文本文件中获取值

    我有一些文本格式的文件 xxx conf 我在这个文件中有一些文本 disablelog 1 当我使用 grep r disablelog oscam conf 输出是 disablelog 1 但我只需要值1 请问你有什么想法吗 一种方法

随机推荐

  • 在 MATLAB 中处理大型 CSV 文件

    我必须处理一个最大 2GB 的大 CSV 文件 更具体地说 我必须将所有这些数据上传到 mySQL 数据库 但在我必须对此进行一些计算之前 所以我需要在 MATLAB 中完成所有这些操作 我的主管也想在 MATLAB 中完成 因为他熟悉MA
  • 将嵌套 XML 数据与数据库表结构进行匹配的最快方法

    我有一个创建的应用程序datarequests这可能相当复杂 这些需要作为表存储在数据库中 一个轮廓datarequest 作为 XML 将是
  • 无法解析 MatDialogRef 角度 4 的所有参数

    我正在研究 Angular 4 我正在尝试设置材质包 在这里我尝试尝试对话框 但它不起作用 可能是因为我不确定材质包 这是我的 dialog components ts import Component OnInit from angula
  • NET::ERR_CERT_COMMON_NAME_INVALID - 错误消息

    前段时间我用 Flask 建立了一个网站 现在突然间 当我尝试导航到那里时 我得到以下信息 NET ERR CERT COMMON NAME INVALID 你的连接不是私人的 攻击者可能试图从 www mysite org 窃取您的信息
  • __cdecl 调用约定不适用于 msvc x64

    只是一个测试 cdecl调用约定 这是一个 cmake 项目 只有 1 个源文件 include
  • 极其奇怪的 IE7/8 边框/不透明度兼容性问题

    奇怪的问题是 当在 IE 8 9 中应用不透明度时 边框会消失 但在 7 中不会 我基本上在屏幕顶部有一个带有选项卡的菜单 IE table tr td class tab button 1 lt td gt td class tab bu
  • 如何将 EF 类型名称传递到方法参数中?

    我正在使用 MVC3 EF4 1 和 C 我正在尝试使用通用方法来更新存在于众多实体类型中的属性 因此 我需要将类型作为参数传递到方法中 请问我该怎么做 一些代码 public Boolean CompleteTask PRV myCurr
  • jQuery AJAX 调用中是否有类似于“finally”的情况?

    jQuery AJAX 调用中是否有 Java 最终 类似物 我这里有这个代码 在我的always我抛出一个异常 但我总是希望它去then method call xmlHttpReq ajax url url dataType json
  • 如何在 Sublime Text 4(Windows)中显示菜单栏

    我更新了我的 sublime 文本 之后我似乎看不到屏幕顶部的菜单栏 但现在必须单击 3 行按钮才能查看它 有什么方法可以让菜单栏再次像平常一样显示吗 我尝试 查看 并启用它 但找不到任何 菜单栏设置 我认为显示汉堡菜单是您当前主题的一个特
  • PyCharm 调试器因 AttributeError 失败

    我无法在 PyCharm 中调试 Flask 应用程序 该应用程序应在端口 5000 上运行 app run host 10 1 0 17 port 5000 debug True 控制台输出为 C Python python exe C
  • 创建线程时有多少开销?

    我刚刚回顾了一些非常糟糕的代码 通过创建一个新线程来在串行端口上发送消息的代码 以便为发送的每条消息在新线程中打包和组装消息 是的 对于每条消息 都会创建一个 pthread 正确设置位 然后线程终止 我不知道为什么有人会做这样的事情 但它
  • Kotlin 协程选择调度程序

    我正在尝试找出在什么情况下使用哪个调度程序 我阅读了一些文档并提出了这个 默认 CPU工作 主要 主要 更新UI 无拘无束 IO 写文件 网络任务 这是正确的吗 那么无拘无束呢 您对调度程序类型的假设是正确的 无限制调度员 不局限于任何特定
  • 将视图模型绑定到淘汰赛中属性的存在

    我正在使用 Knockout js 填充一组 HTML5
  • Django:多个帐户,每个帐户下有多个用户,但特定于帐户的数据

    这里使用 Django 1 5 我创建了一个应用程序 当前拥有一大组数据 如果您愿意的话 可以用于一个 帐户 这意味着我的应用程序中所有模型中的所有数据都可供所有登录用户使用 现在 我希望能够让更多的人使用我的应用程序 但使用他们自己的数据
  • JavaScript、node.js 在继续之前等待 socket.on 响应

    我需要从客户端的服务器获取信息 所以在服务器端 当客户端第一次连接时我得到了这个 socket on adduser function username misc code where i set num player and whatno
  • CircleCi 2.0 在子目录中处理项目

    我正在尝试整合我的springbootCircleCi 的教程项目 我的项目位于 Github 存储库内的子目录中 我从 CircleCi 收到以下错误 目标需要一个项目来执行 但其中没有 POM 目录 home circleci reci
  • 如何检测DrawerLayout是否开始打开?

    所以我想在导航抽屉中隐藏一些选项卡starts开放 我的代码在打开后隐藏了它们 但这不是我想要的 mDrawerToggle new ActionBarDrawerToggle this mDrawerLayout R drawable i
  • JavaScript(ES6) 将对象设置为 null 时 WeakMap 垃圾回收

    我刚刚读到 WeakMaps 通过专门使用对象作为键来利用垃圾收集 并且将对象分配给 null 相当于删除它 let planet1 name Coruscant city Galactic City let planet2 name Ta
  • 在函数类型签名中替换 => 代替 ->

    我只是观察到如果不是 gt 我写的 gt 在函数的类型签名定义中 它不会导致编译时错误 示例代码 mysum Num a gt a gt a Notice gt after the list a mysum 0 mysum x xs x m
  • dijit.Tree搜索和刷新

    我似乎无法弄清楚如何使用 ItemFileWriteStore 和 TreeStoreModel 在 dijit Tree 中进行搜索 一切都是声明性的 我使用的是 Dojo 1 7 1 这是我到目前为止所拥有的