簡體   English   中英

如何使相同的JSF Composite Component多次包含以具有自己的javascript范圍?

[英]How to make same JSF Composite Component included multiple times to have its own javascript scope?

我有一個像這樣的JSF復合組件:

 <cc:implementation>
   <div id="#{cc.clientId}">
        <h:outputScript library="js" name="helper.js"/>

        <script type="text/javascript">
        if(typeof variables === "undefined"){
             var variables = {};
        }

        (function(){
            variables.formid = '#{cc.clientId}'; 
        })();
        </script>
    </div>

我在helper.js文件中使用的variables.formid值。 當我僅將此復合組件包含一次時,它的工作就應該正常進行。 當我包含多個復合組件時,每個組件都會收到最后一個包含的復合組件的值,如何解決此問題?

基本上有2種方法。

  1. helper.js添加一種“注冊”函數,以便您可以在此處顯式注冊它,而不用讓它搜索合成。

     <h:outputScript name="js/helper.js" target="head" /> <div id="#{cc.clientId}"> ... </div> <h:outputScript>helper.register("#{cc.clientId}", { foo: "somevalue" });</h:outputScript> 

    可以通過JS對象提供選項作為參數。 這也是PrimeFaces與PrimeFaces.cw()函數一起使用的方式,“小部件名稱”也作為選項傳遞。

  2. 給復合材料一個獨特的樣式類,如下所示:

     <h:outputScript name="js/helper.js" target="head" /> <div id="#{cc.clientId}" class="your-foo-composite"> ... </div> 

    這樣, helper.js可以在准備好文檔時按類名收集它們。

     // Vanilla JS: var yourFooComposites = document.getElementsByClassName("your-foo-composite"); // Or if you happen to use jQuery: var $yourFooComposites = $(".your-foo-composite"); 

    可以將選項作為HTML5數據屬性提供這些天瀏覽器支持不錯 )。

     <div id="#{cc.clientId}" class="your-foo-composite" data-foo="somevalue"> 

    可以通過以下方式獲得:

     // Vanilla JS: for (var i = 0; i < yourFooComposites.length; i++) { var yourFooComposite = yourFooComposites[i]; var clientId = yourFooComposite.id; var dataFoo = yourFooComposite.dataset.foo; // ... } // Or if you happen to use jQuery: $yourFooComposites.each(function(index, yourFooComposite) { var $yourFooComposite = $(yourFooComposite); var clientId = $yourFooComposite.attr("id"); var dataFoo = $yourFooComposite.data("foo"); // ... }); 

    它還使HTML輸出不受內聯腳本的影響。


具體問題無關 ,使用“ js”作為初始代碼中的庫名並不好。 仔細閱讀JSF資源庫的用途以及如何使用它? 還要注意,我在<h:outputScript>添加了target="head"屬性。 如果您正確使用了JSF <h:head>組件,它將使JSF將腳本自動重定位到生成的HTML <head>元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM