我有一个在dojo中设计的独立页面(page1.htm),它有几个过滤器和一个网格。在输入过滤网格中的值时,将填充值。 现在我必须开发另一个页面(page2.htm),其中有一个网格。 现在,当用户点击网格中的一行时,我需要将值(与page1的过滤器相同)从此处传递到page1,并根据page2.htm传递的值填充网格。
请告诉我如何实现这一目标
答案 0 :(得分:0)
有很多方法可以做到这一点,但我认为在大多数情况下,最简单的方法是将值作为URL参数传递。
重要的是你要意识到这与Dojo没有任何关系。这是标准的基本Web浏览器功能。也就是说,Dojo确实有一个你可能会发现有用的模块:dojo/io-query(我假设你使用的是最近版本的Dojo)。
假设您的page1.htm有一个名为rowClicked
的函数,在单击网格行时会调用该函数。在此函数中,您获取page2.htm所需的值,然后告诉浏览器打开page2.htm,并将值作为URL参数附加。
var rowClicked = function() {
var someValue = getSomeValue(),
someArray = [ 13, 42 ];
window.location.replace('./page2.htm?someValue=' + someValue +
'&someArray=' + someArray[0] +
'&someArray=' + someArray[1]);
};
如果你有很多价值,这可能有点麻烦。让我们改用Dojo的io-query:
require([/*..your other dependencies..,*/ "dojo/io-query"],
function(/*..other dependencies..,*/ ioQuery) {
//.. your other code ..
var rowClicked = function() {
var values = {
someValue: getSomeValue(),
someArray: [ 13, 42 ]
};
window.location.replace('./page2.htm?' +
ioQuery.objectToQuery(values));
};
// ....
在page2.htm上,假设在加载页面时调用了一个名为loadValues
的函数。在这个函数中,我们从URL参数中获取值,并用它们做我们需要的任何事情。我们再次使用Dojo的io查询。 (但请记住,您可以轻松地在没有任何库的情况下执行此操作!请参阅此答案以获取一些想法:How can I get query string values in JavaScript?)
var loadValues = function() {
var page1Values= ioQuery.queryToObject(window.location.search.slice(1));
console.log("Here are the values: ",
page1Values.someValue,
page1Values.someArray[0],
page1Values.someArray[1]);
};
(当然,您必须先在代码中加载dojo/io-query
。)
在上面的示例中,我们使用了URL参数将值从page1发送到page2。请求page2时,URL参数将发送到服务器,因此它们可能会与URL中的其他参数发生冲突。
将值传递给page2的另一种方法是在使用浏览器位置的同时使用它的“哈希”部分。发现微小的差异:
your.site/page2.htm?someValue=abc&someArray=13&someArray=42 // URL parameters
your.site/page2.htm#someValue=abc&someArray=13&someArray=42 // hash part
第二行中的参数不会发送到服务器。正如您所期望的那样,对上面代码的更改将非常小。在page1.htm上,将window.location行替换为:
window.location.replace('./page2.htm#' +
..并在第2页上,将window.location行更改为:
var page1Values= ioQuery.queryToObject(window.location.hash);