1

これを行うためのより良い方法があるかもしれませんが、現在、いくつかの構成可能なオプションを持つことができる、適切にカプセル化された JavaScript オブジェクトがあります。(Dreamweaver の「スニペット」を介して) ページに HTML コードのチャンクを含めます。ページの読み込み時に、JS ファイルが DOM を介して実行され、それらのコード チャンクのいずれかを特定の機能として識別し、先に進んでその機能を設定します。

ページに複数のオブジェクトを追加し、それらを構成可能にするまでは、これで問題ありません。ここで重要な点は、現在のセットアップでこれらのオブジェクトを好きなだけページに追加できるということです。これは、その時点では汎用的であり、「id」属性がないためです。

今、私はこれらのオブジェクトを設定したいので、「設定オブジェクトが見つかった場合、これらのオブジェクトがチェックして適用する設定を含む外部ファイルはどうですか」と考えました。これも問題なく動作しますが、設定データは少し「削除」されたように感じます。これは最終的に他の同僚にとって迷惑になると思います。これは覚えておくべきもう 1 つのことです。

したがって、私の質問に対して、ページの読み込み時に自己インスタンス化オブジェクトを引き続きトリガーするこれらのコード ブロックを挿入しても問題ありませんが、試してみたいのは、構成設定を含むスクリプト ブロックも挿入することです。親要素が構成のコンテキストであることを認識して、挿入されたコードブロックの手段が必要です。

コード例:

<div class="snippet">
    <_contents of this 'snippet'_/>
    <script type="text/javascript">
        new Snippet().init({
            rootElement: REFERENCE_TO_THIS_SCRIPT_TAGS_PARENT_NODE,
            configOptionA: true,
            configOptionB: false
        });
    </script>
</div>

注:<div class="snippet">には、意図的に 'id' 属性がありません。これは、これらの複数をページにドロップできるようにするためです。

私のいくつかの制限に従う限り、他のソリューションを歓迎します!

4

1 に答える 1

0

私の他の関連する質問(現在回答済み)はこれに対処していますが、基本的には次のようになりました。

<div class="snippet">
    <elements... />
    <script type="text/javascript">
        var tmpVarName = 'configOb_'+Math.floor(Math.random()*1111111) ;
        document[tmpVarName] = {
            remainVisible:true,
            hoverBehaviour:false
        };        
    </script>
</div>

...そして、すべてのページに読み込まれるスクリプトで、適切な要素をスキャンしてインスタンス化し、構成します。

var snippets = yd.getElementsBy(function(el){
                    return yd.hasClass(el, "snippet");
                },null,document );
for( var i=0; i<snippets.length;i++ )
{
    var s = snippets[i] ;
        yd.generateId(s, '_snippet_'+i );
    var tag = yd.getElementBy(function(el){
                return true;
            },'script',s );
    var ob = new Snippet();
        ob.setId( s.id );
        ob.init( eval( tag.innerHTML ) );
}

上記のコードのより完全なコンテキストについては、

  • yd = YAHOO.util.Dom
  • Snippet.init() および Snippet.setId() は、Snippet() という Module オブジェクトの公開メソッドです。

挿入されたコンテンツの「チャンク」には id 属性がなく、動的に評価されるコンテキスト構成オブジェクトがあるため、好きなだけバリアントを自由に追加できます。私の唯一の本当の懸念は、これらの Snippet() オブジェクトの全体が私のページに追加された場合のパフォーマンスです (可能性は低いです)。

于 2010-06-21T01:02:25.150 に答える