1

以下のようなビューがあり、多くのビューをコンテンツ ビューに動的に追加していますが、スクロールバーが表示されないという問題があります。そこで、少しドリルダウンしたところ、ビューを動的に追加した後、コンテンツの高さが更新されていないことがわかりました。

ここで何が間違っていますか?同じコードが Openlaszlo 3.3 で正しく動作しています

<view name="wrapper">
 <view name="scrollablecontainer"
                  width="${this.contentwrapper.width &gt; parent.width
                         ? this.contentwrapper.width : parent.width}"
                  height="${this.contentwrapper.height &gt; parent.height 
                          ? this.contentwrapper.height : parent.height}">
                <view name="contentwrapper" >
                    <view name="contents"/>
                </view>
  </view>
 <vscrollbarnew name="vscroll"
                        height="${this.height}"
                        pagesize="${this.height}"
                        visible="${this.scrollable}"/>
</view>

コンポーネントが初期化されるときに、contentwrapper の幅と高さを 0 に設定していることを 1 つ見逃していました。

ランタイム:swf テストブラウザ:firefox、windows xp

4

1 に答える 1

1

あなたの構造は非常に複雑に見えます。contentwrapper と content ビューがあるのはなぜですか。OpenLaszlo 3.4 (swf7 および swf8) と OpenLaszlo 5.0 トランク (SWF10 および DHTML) の両方でコンパイルするサンプルを作成しました。ビューでクリッピングを true に設定し、動的に作成されたビューが追加さwrapperれるレイアウトをビューに追加しました。scrollablecontainer

<canvas height="400">

    <attribute name="counter" type="number" value="0" />

    <class name="rectangle" width="200" height="30" bgcolor="blue">
        <text name="label" align="center" valign="middle" />
    </class>

    <!-- Wrapping view needs to have a width and height set and clip set to true -->
    <view name="wrapper" x="100" y="10"
          width="236" height="150"
          bgcolor="#ff9999"
          clip="true">

        <view x="10" name="scrollablecontainer"
              bgcolor="#aaaaaa">

            <simplelayout axis="y" spacing="8" />

        </view>

        <vscrollbar name="vscroll"
                    visible="${this.scrollable}"/>
    </view>

    <method name="addView">
        var v = null;
        if ( $swf7 || $swf8 ) {
            v = new rectangle( canvas.wrapper.scrollablecontainer );
        } else {
            v = new lz.rectangle( canvas.wrapper.scrollablecontainer );
        }
        canvas.counter++;
        v.label.setAttribute( 'text', 'View #' + canvas.counter );
    </method>

    <view>
        <checkbox value="true" onvalue="canvas.wrapper.setAttribute('clip', this.value)" />
        <text x="20" >Clipping of view 'wrapper'</text>
    </view>

    <button y="25" text="Add view" onclick="canvas.addView()" />

</canvas>

指定されたビューでwrapperは、クリッピングが有効になっている必要があり、幅と高さの値が設定されている必要があります。チェックボックスをクリックするclipと、ラッパーの属性の値を切り替えて効果を確認できます。

OpenLaszlo 5.0 トランク SWF10 で実行されているアプリは次のとおりです。 OpenLaszlo スクロールバーと動的ビュー生成

OpenLaszlo 3.4 SWF8 で同じコードを実行すると、次のようになります。 ここに画像の説明を入力

于 2012-11-30T16:23:56.787 に答える