DOJO JsonRest - 在单击后无法更改目标 URL

DOJO JsonRest - Unable to Alter Target URL After onClick

本文关键字:目标 URL JsonRest 单击 DOJO      更新时间:2023-09-26

我有这个与FilteringSelect

var jsonStore = new JsonRest  ({
    target: "/ajax_script/autocomplete?term1=" + foo1 + "&term2=" + foo2
});

但是当我单击将term2的值更改为foo3的按钮时,target始终保留在foo2

我可以在控制台中看到term2的值确实在实例化之前和jsonStore之后都更改为foo3,所以我想知道 jsonStore 对象是否以某种方式缓存。

这是对target的不当使用吗?有没有办法解决这个问题,或者也许是另一种选择?

编辑哈普雷特的答案

我确实尝试了这种将参数传递给 target url 的方法,但我发现它与 FilteringSelect 不兼容。

我对FilteringSelect的理解是它将searchAttr属性值传递给 JsonRest URL,因此如果我searchAttr是"term",则在用户输入中输入的数据(通过 FilteringSelect(然后作为"term=someusrinput"传递。

就我而言,我需要传递进一步的参数,但是使用store.query()会导致对JsonRest URL的单独请求,该请求不包括来自FiteringSelect的"术语"。store.query请求包含"term1,term2,term3"参数,该参数失败,因为它不包含"term"(来自FilteringSelect(,然后FilteringSelect请求包含"term",失败,因为它不包含"term1,term2,term3"!

我需要将其他参数传递给 target URL,该 URL 的工作原理是使用查询字符串修改target URL - 传递FilteringSelect术语并与查询字符串变量组合。

面临的问题是我无法使用通过onClick修改的查询字符串的新参数通过JsonRest"重新查询"。

这不是将参数附加到 URL 的正确方法。

您无需修改目标。

检查此示例

require(["dojo/store/JsonRest"], function(JsonRest) {
    var store = new JsonRest({
        target: "/ajax_script/autocomplete"
    });
    store.query({
        term1: "foo1",
        term2: "foo2",
    }, {});
    //URL - "/ajax_script/autocomplete?term1=foo1&term2=foo2
});

Dojo 会自动将你term1 term2参数附加到每个getputadd和其他方法的父 url 中和

检查此示例的结果请求 URL

编辑

筛选选择 + JSON 存储

您尝试实现的目标无法使用 FilteringSelect。为此,您应该使用"选择"。

问题是过滤*选择会在您在 筛选选择文本框。例如:如果您键入k它将变为k*。当它被传递给 JsonRestStore 进行查询时,它不会 将其视为特殊输入,不会将其修改为智能 搜索,但将其用作您要与结果匹配的确切模式。

var query =  {
    valueToSearch: "k*"
}

并且您的 URL 变为:example.com?valueToSearch=k*

"k*" == "kite" //false

而不是使用FileringSelect,您应该使用Select,然后你的查询将是

var query =  {
    valueToSearch: "kite"
}

并且您的 URL 变为:example.com?valueToSearch=kite

风筝 == 风筝//true,因为"风筝"将当前选择的值,用户未输入

我还创建了这个jsFiddle,您可以使用控制台的

检查这个 SO 的另一个问题

我可以建议你的可能解决方案

  1. 使用"选择">微件

  2. 修改 - JsonRestStore 根据您的要求。

  3. 使用 JSON 请求从远程服务器预加载所有数据,并将其添加到内存存储中,然后毫不费力地使用它。然后,您可以使用"筛选选择">,而不会出现任何问题。