2

当我从主窗口创建一个子窗口时,我想向它传递一个 JavaScript 对象,但我不确定是否真的有办法做到这一点?

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

我相信有一些解决方法是可能的,但它们都不是非常简单的,并且每个都使用其他的东西,而不是简单的 JavaScript:

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

2 回答 2

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');
于 2013-03-13T08:55:27.943 回答
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>

对我有用。

于 2013-03-16T12:29:50.557 回答