TideSDK:有没有办法将数据传递给子窗口?

时间:2013-02-09 22:41:36

标签: javascript tidesdk

当我从主窗口创建一个子窗口时,我想传递一个JavaScript对象,但我不确定是否有办法实现它?

使用TideSDK创建的两个窗口都有自己的JavaScript环境,就像两个浏览器窗口一样(如果我理解的话,那就是它们就是这样),所以你不能在另一个窗口中访问一个窗口中的变量。另一方面,您可以从您所在的窗口访问其他窗口(例如使用Ti.UI.getOpenWindows)。那么......有办法吗?

我认为有一些变通方法是可行的,但它们都不是非常直接的,每个都使用其他东西,然后只是简单的JavaScript:

  • 使用Ti.DatabaseTi.Filesystem存储我要传递的数据,然后从子窗口中检索它
  • 将数据作为GET变量传递给新窗口,例如:Ti.UI.createWindow("app://page.html?data1=test&data2=foobar");

2 个答案:

答案 0 :(得分:4)

您可以将对象分配给子窗口对象

var objToBePassed = {foo:'bar'};    
var currentWindow = Ti.UI.currentWindow;
var newWindow = currentWindow.createWindow("app://page.html");
newWindow.obj = objToBePassed;
newWindow.open();

并且在子窗口的javascript环境中,您可以通过

访问该对象
var currentWindow = Ti.UI.currentWindow;
var obj = currentWindow.obj;

另一种方法是使用Ti.API.set:

Ti.API.set('objKey', objToBePassed);

您可以通过

随处访问该对象
var obj = Ti.API.get('objKey');

答案 1 :(得分:0)

我知道这已经得到了解答,但是我遇到了一种模仿PHP $ _GET变量的方法,它将执行OP认为我认为的事情:

<script type="text/javascript">
(function(){ 
   document.$_GET = [];
   var urlHalves = String(document.location).split('?');
   if(urlHalves[1]){
      var urlVars = urlHalves[1].split('&');
      for(var i=0; i<=(urlVars.length); i++){
         if(urlVars[i]){
            var urlVarPair = urlVars[i].split('=');
            document.$_GET[urlVarPair[0]] = urlVarPair[1];
         }
      }
   }

})();

</script>

然后使用它:

<script type="text/javascript">
    var conts = '<li><a  title="back to list" href="/menu.html?module='+document.$_GET['module']+'">Unit Listing</a></li>';
    document.write(conts);
</script>

对我有用。