3

そこで私は、Dropbox を介して作業する友人向けの「wiki」風のアプリケーションを作成することにしました。つまり、すべてのファイルがローカルに保存され、全員が更新します。

すべてのファイルは、フラッシュによって取り込まれた .txt であり、シンプルなナビゲーションおよび検索ツールを使用して表示されます。

今、私はこれをさらに一歩進めて、コンテンツから記事をリンクしようとしています。例:

第 1 条は「りんご」と呼ばれます。内容は「りんごはおいしい」。第 2 条は「ベアーズ」と呼ばれます。その内容は「クマはよくりんごを食べる」。

ユーザーが記事 2 を開いたときに、「りんご」という単語をクリックすると記事 1 (「りんご」) が開くようにしたいと考えています。

ダイナミック テキスト ボックス内の特定の単語をクリックするとトリガーされるイベントを作成する方法を知りたいです。ダイナミック テキスト ボックス全体ではありません。

クリック可能な単語の形でムービークリップを作成し、単語の上に重ねることを考えましたが、より簡単なオプションが利用できる場合、それは面倒です.

4

3 に答える 3

6

テキストボックスのhtmlTextプロパティを使用して、単語を動的にリンクさせることができます。次に、TextEvent.LINKイベントを使用して、クリックされた単語をキャッチします。

テキスト ボックスにコンテンツを入力する前に、「キーワード」のリストを反復処理して、.replace("keyword", '<a href="event:keyword">keyword</a>');

したがって、コードは次のようになります。

// get the file contents using whatever method you use
var contents:String = getFileContents("page2.txt");

// assuming you have your keywords in an array
var keywords:Array = ["Apples", "Pears"];
for each (var keyword:String in keywords) {
    // replace the current keyword with a version of itself wrapped in a link
    contents = contents.replace(keyword, '<a href="event:' + keyword + '">' + keyword + '</a>');
}

yourTextField.htmlText = contents;

// add an eventlistener for the click
yourTextField.addEventListener(TextEvent.LINK, linkClicked);
function linkClicked(e:TextEvent):void {
    // load the article for the clicked word =]
    loadPage(e.text);
}

更新
キーワードの大文字と小文字を無視したい場合は、「りんご」が「りんご」と一致します(「aPpLeS」も一致します)、正規表現を使用して、単語をそのまま保持できるようにする必要があります本文中:

// build a |-separated list of keywords
var keywordList:String = "";
for each (var keyword:String in keywords) {
    keywordList += ((keywordList != "") ? "|" : "") + keyword;
}
// build the regex and replace each keyword in-place
var pattern:RegExp = new RegExp("(" + keywordList + ")", "gi"); // "i" for ignore-case =]
contents = contents.replace(pattern, '<a href="event:$1">$1</a>');

上記が|-separated キーワードのリストを構築し、(各キーワードの置換ではなく) 単一の置換を行う理由は、separated-list が順番に置換を行い、見つかったキーワードが挿入された HTML を壊すことを許可しないためです。前のキーワード (たとえば、「イベント」というキーワードがあったとします。これを make に置き換えると、HTML が壊れます<a href="<a href="event:event">event</a>:keyword1">keyword1</a>)。

テキストの元のケースは、イベントと共に送信されます。既存のすべてのキーワードを検索して、イベントに渡されたキーワードと比較する (比較のために両方を小文字に変換する.toLowerCase()) か、プライマリ キーワードは常に小文字で、毎回リストを検索する心配はありません。

于 2012-08-20T16:41:11.897 に答える
3

Flash TextField には htmlText というプロパティがあります。これを通常のテキスト プロパティの代わりに使用すると、テキスト フィールドに html を配置でき、HTML ページのように特定の「リンク」で href タグを使用できます。

myTextField.htmlText = "<a href='http://blahblahblah.com/apples'>Apples</a>";

または、フラッシュ内にとどまって関数を実行する場合:

myTextField.htmlText = "<a href='event:myEvent'>Click Me.</a>"
myTextField.addEventListener(TextEvent.LINK, linkClickHandler);

function linkClickHandler(e:TextEvent):void {
    trace(e.text); // myEvent
}
于 2012-08-20T16:40:26.400 に答える
3

htmlText と link イベントを使用して、別の記事を検出してリダイレクトできます。

var link:String = "apples";

text.htmlText = '<a href="event:' + link+ '">' + link + '</a>'; 
text.addEventListener(TextEvent.LINK,linkEvent);

function linkEvent(event:TextEvent):void 
{   
    trace(event.text);
    if(event.text == "apples")
    {
       //do stuff
    }
}
于 2012-08-20T16:41:56.420 に答える