2014-02-07 175 views
0

我有一个在dojo中设计的独立页面(page1.htm),它有两个过滤器和一个网格。输入过滤网格中的值时会填入值。 现在我不得不开发另一个页面(page2.htm),其中有一个网格。 现在,当用户点击网格中的一行时,我需要从这里传递值(与page1的过滤器相同)到page1,并根据从page2.htm传递的值来填充网格。在dojo中将值从一个页面传递到另一个页面

请让我知道我可以做到这一点

+0

JavaScript的环境不跨网页。这将是一个巨大的安全漏洞。您需要执行以下操作之一1.保持同一页面。 2.将这些值来回传递给服务器。 3.将数据存储在离线存储中。 –

回答

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-查询,而不是:

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-query。 (但请记住,你可以很容易地做到这一点没有任何图书馆也看到这个答案的一些想法: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。当页面2被请求时,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#' + 

..和Page2上,改变与window.location的行:

var page1Values= ioQuery.queryToObject(window.location.hash); 
相关问题