2012-10-29 38 views
1

我只是試圖將textarea整合到dhtml環​​境中。我能夠看到文本區域但我無法在文本區域中輸入任何內容。附件是一段代碼片段。如何在openlaszlo中集成textarea?

<canvas debug="true"> 
<attribute name="htmlsnippet" type="string" value="" /> 

    <handler name="oninit" args="e"> 
    <![CDATA[ 
     canvas.htmlsnippet = '<textarea id="textArea" rows="8" cols="50"></textarea>'; 
    ]]> 
    </handler> 

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

    <text id="textcont" width="530" height="350" bgcolor="#cccccc" /> 

    <button text="modify text" onclick="textcont.sprite.setText(canvas.htmlsnippet)" /> 
</canvas> 
+0

你預計會發生什麼?你想動態地創建一個新的textarea,或者你想讓這個文本在textfield中顯示爲文本內容嗎? –

+0

@RajuBitter:我已經更新了這個問題。我能夠看到文本區域,但我無法在文本區域輸入任何內容。 – karthick

回答

2

雖然可以在運行時生成一個HTML元素,並添加到視圖的顯示對象,OpenLaszlo的內核將處理所有的鼠標和KEYDOWN事件,而不是將它們傳遞到您創建的文本區域。

OpenLaszlo中的<inputtext>組件實例化內部<textarea>。編譯下面的OpenLaszlo DHTML應用:

<canvas debug="true"> 

    <inputtext id="iText" multiline="true" width="100" resize="true" bgcolor="red"> 
    <handler name="oninit"><![CDATA[ 
     this.setAttribute('text', 'Just\na\ntest!'); 
    ]]></handler> 
    </inputtext> 

</canvas> 

現在通過進入這個表達式到瀏覽器的JavaScript控制檯檢查文本對象:

iText.sprite.__LZdiv.children[0]

,你會看到類似這樣的:

<textarea class="lzswfinputtextmultiline" name="" style="color: rgb(0, 0, 0); width: 96px; height: 40px; pointer-events: auto;">

根據瀏覽器的風格值可能不同。

不幸的是,OpenLaszlo不提供API來將自定義textarea添加到應用程序,而無需自己處理textarea的keydown,focus和mouse事件。這正是LFC /內核類(LzText.lzs,LzInputText.lzs,LzTextSprite.js,LzInputTextSprite.js)的組合所做的事情:它們複製DHTML的SWF文本類行爲 - 因爲OpenLaszlo在DHTML運行時之前具有SWF運行時。

這對於HTML5來說並不是最優的,也可能是OpenLaszlo平臺的最大弱點之一。因此,最好不要將自己的<textarea>添加到DHTML運行時應用程序 - 除非將其放入iFrame /單獨的HTML頁面。