如何从Javascript访问生成的Javascript(ScriptObject)?
我有一个Silverlight应用程序,可以在Silverlight站点上生成许多Google Maps对象。例如,创建的地图如下所示:如何从Javascript访问生成的Javascript(ScriptObject)?,javascript,silverlight,Javascript,Silverlight,我有一个Silverlight应用程序,可以在Silverlight站点上生成许多Google Maps对象。例如,创建的地图如下所示: var map = HtmlPage.Window.CreateInstance(@"google.maps.Map", container, mapOptions); var center = (ScriptObject)_map.Invoke("getCenter"); 一切正常。但是现在我需要直接从Javascript访问map对象。我认为可以通过将映
var map = HtmlPage.Window.CreateInstance(@"google.maps.Map", container, mapOptions);
var center = (ScriptObject)_map.Invoke("getCenter");
一切正常。但是现在我需要直接从Javascript访问map对象。我认为可以通过将映射属性公开为ScriptableMember并从Javascript中使用它来实现。但这有点奇怪,因为地图对象已经存在于浏览器中。但我如何访问它
更新
我只是想说清楚我在说什么
假设我已经创建了如上所示的地图。现在,我有了一个加载的Javasript文件,其中包含以下函数:
function ReadMapCenter()
{
//Need the map object in Javascript
map.getCenter();
}
如何从Javascript访问现有的map对象?如果您只是将其作为ScriptObject类型公开,我认为桥接器将简单地解压脚本对象,而不是为其创建另一层包装 另类 不要使用CreateInstance 在全局级别的javascript中使用:-
var map;
function createMap(container, mapOptions)
{
if (!map)
{
map = new google.maps.Map(container, mapOptions);
}
return map;
}
现在您的javascript有了一个全局映射,可以使用它
在silverlight中使用:-
var map = HtmlPage.Window.Invoke("createMap", container, mapOptions);
如果您只是将其作为ScriptObject类型公开,我认为桥接器将只需解压缩脚本对象,而不是为其创建另一层包装 另类 不要使用CreateInstance 在全局级别的javascript中使用:-
var map;
function createMap(container, mapOptions)
{
if (!map)
{
map = new google.maps.Map(container, mapOptions);
}
return map;
}
现在您的javascript有了一个全局映射,可以使用它
在silverlight中使用:-
var map = HtmlPage.Window.Invoke("createMap", container, mapOptions);
在我最初的帖子中添加了更多的解释。不知道我说的是不是很清楚,没错。我没有想到那件事。我是在SL世界中长大的,我认为一定有办法升级ScriptObject。像这样,我不得不改变一些事情,但这可能是最简单的方法。谢谢你的指点。在我最初的帖子中添加了更多的解释。不知道我说的是不是很清楚,没错。我没有想到那件事。我是在SL世界中长大的,我认为一定有办法升级ScriptObject。像这样,我不得不改变一些事情,但这可能是最简单的方法。谢谢你的指点。