1

美好的一天,我有一个问题困扰了我几个小时。这是非常直接的。我尝试在呈现复合组件时调用/执行 JavaScript。就像您可以使用 html 标记正文和 onload 执行的操作一样。

如何引用要执行的内联 JavaScript?

<cc:implementation>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" />
    <div id="#{cc.clientId}" >

        <div id="map_canvas" style="width: 850px; height: 350px; padding: 1px; border: darkblue" />

        <script>init();</script>

        <script type="text/javascript">
            var map = null;
            function init() {
                var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
                var myOptions = {
                    zoom: 7,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
            }
        </script>
    </div>
    </cc:implementation>

我试过 this.init() , #{cc.clientId}.init() 。但是在上下文中找不到JS。如果我从 JSF/ajax 组件执行它,只需“init();”就可以正常工作

4

1 回答 1

5

您在定义函数init() 之前调用。

将调用放在函数定义之后。

<script type="text/javascript">
    var map = null;
    function init() {
        var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
        var myOptions = {
            zoom: 7,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    }
</script>
<script>init();</script>

或者只是摆脱函数调用并直接执行它。它会在被定义后执行<div id="map_canvas">

<script type="text/javascript">
    var map = null;
    var latlng = new google.maps.LatLng(51.5001524, -0.12623619);
    var myOptions = {
        zoom: 7,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
</script>

与具体问题无关:您的复合组件中还有另一个设计缺陷。此组件不能在同一个视图中多次重复使用。您最终会<div id="map_canvas">在 HTML 中使用多个元素。在 HTML 中有多个相同的元素id是非法的。相应地修复它:

<div id="#{cc.clientId}_map_canvas" ...>

... document.getElementById("#{cc.clientId}_map_canvas") ...
于 2011-06-15T14:22:27.107 回答