0

私はactionscriptにかなり慣れていません。ファイル・パスのXMLリストを受け取っています。これからファイル名を抽出する必要があるので、itemRendererを設定しましたが、名前に対して何も取得しません。ブレークポイントを追加しましたが、fileNameに正しいファイル名が含まれていますが、ビューに表示されません。私は何が間違っているのですか?

コードを表示:

<s:SkinnableContainer width="100%">
    <s:DataGroup itemRenderer="modules.custFiles.renderers.CustFileItemRenderer" dataProvider="{custFiles}" width="100%">
        <s:layout>
            <s:VerticalLayout gap="0"/>
        </s:layout>
    </s:DataGroup>
</s:SkinnableContainer>

レンダラーコード:

override public function set data(value:Object):void
{
    var node:XML = value as XML;
    _link = node.toString();
    var filename:RegExp = /[^\/\/]*$/ig;
    filename.text = _link.match(filename);

    super.data = value;
}

XML:

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://mysite.com/srv">
<string>
http://mysite.com/files/custFiles/custfile-1.pdf
</string>
<string>
http://mysite.com/files/custFiles/custfile-2.pdf
</string>
</ArrayOfString>
4

3 に答える 3

1

'setdata'関数の行を次のように変更します。

super.data = _link.match(filename);

親クラスに正しい値を設定していません。

于 2012-12-29T17:55:27.463 に答える
1

この場合、カスタムレンダラーは必要ありません。データを文字列のIListに変換するだけです。

function toListOfString(xml:XML):IList {
  if (!xml) return new ArrayCollection();

  const children:XMLList = xml.children(),
        source:Array = [];

  for each(var child:XML in children) source.push(child.text())

  return new ArrayCollection(source);
}

結果を取得し、メソッドの結果をリストに割り当てます。これは、Flex開発に伴う単一の問題を分離するために、開始して表示するのに役立ちます。

なぜ私はそのように提案しているのですか?XML / XMLListインスタンスは、Flexでデータを操作するのに最適ではありません。DataBindingはこれらのクラスではサポートされていないため、とにかくアプリがより複雑になるクラスに移動します。

于 2012-12-29T16:42:47.240 に答える
0

Labelレンダラーにnameのようなテキストコンポーネントがあるようですが、タイプが。のfilenameローカル変数を宣言します。filenameRegExp

そして、あなたは今幸運ではありません-クラスです、それはあなたRegExpdynamic

filename.text = _link.match(filename);

エラーは発生しません。しかし、そうすべきです。ローカル変数の名前を。のような名前に変更してみてくださいfileNameRegExp

ちなみに、@ ethrbunnyはすでにその事実に言及しているので、@ethrbunnyに「accept」を与えると思います。

于 2012-12-29T16:39:36.410 に答える