gpt4 book ai didi

javascript - 为什么多个以编程方式生成的 FilteringSelect 不能共享一个存储?

转载 作者:行者123 更新时间:2023-11-28 02:55:25 24 4
gpt4 key购买 nike

在你问之前,在这种情况下,多重选择对于用户来说并不是很直观。
我有一个对象,其中一个数组作为“items”的值,该对象在页面上的 var 语句中提供。我还有一个函数可以生成并放置 dijit.form.FilteringSelect 并在某个按钮的单击事件上触发。这些选择中的每一个都应该将上述对象作为其“store”属性。如果我在选择的初始化代码中编写 store: new dojo.data.ItemFileReadStore({ data: object_name }), ,我会得到奇怪的行为:
我单击生成按钮 2 次并得到2 个 FilteringSelects(称它们为 A、B)。我单击 B 的下拉菜单,菜单将显示附加到 B。然后,我单击 A 的下拉按钮,菜单将显示附加到 A。如果我返回并再次单击 B 的下拉按钮,则什么也不会发生(当然不是什么也没有发生;抛出错误)。
但是,如果我有 data: {items: array_literal} 一切正常,并且我可以根据需要在两者之间来回切换。
由于 data: 语句在 javascript 代码中出现一次,这不是什么大问题(现在我至少有一个解决方法)。然而,这非常奇怪。我试图深入研究源代码,但无济于事。
有人知道这里发生了什么吗?

最佳答案

原因是您在创建 dojo.data.ItemFileReadStore 时传递了 data 参数。商店直接使用该对象。在源代码中,您可以看到this._arrayOfTopLevelItems = dataObject.items;。因此,您创建的两个存储使用相同的数组对象作为后端存储。因此,您在一个小部件中所做的更改也会更改另一个小部件。通过使用数组文字,您实际上创建了两个不同的对象,那么应该没问题。两个小部件不会互相干扰。

我对这种情况的解决方案是使用dojo.clone创建数据的副本,然后使用该副本创建存储。

关于javascript - 为什么多个以编程方式生成的 FilteringSelect 不能共享一个存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2791399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com