14

私はaureliaを使用しており、ビュー モデルではなくビューでコレクション (配列) をフィルター処理したいと考えています。

そのために次の構文を試しています。

<div class="col-sm-7  col-md-7 col-lg-7 ${errors.filter(function(err){return err.Key==='car.Model';}).length >0? 'alert alert-danger' :''}">
            <span repeat.for="error of errors">
                <span if.bind="error.Key==='car.Model'">
                    ${error.Message}
                </span>
            </span>
</div>

そして、ブラウザコンソールで次のエラーが表示されます:

Error: Parser Error: Missing expected ) at column 28 in [errors.filter(function(err){return err.Key==='car.Model';].

これは、次のように angularJS で可能です。

 <div class="small-7  medium-7 large-7 columns end">
        <span class="error" ng-repeat="error in errors  | filter:{ Key: 'car.Model'}">
            <span class="error-message">
                {{error.Message}}
            </span>
        </span>
    </div>

aureliaでも同様のことが可能ですか?

repeat.forまた、コレクション/配列を aureliaでフィルター処理する方法も知りたいです( と同様ng-repeat)。同様の方法でフィルター関数を使用しようとしましたが、それも機能せず、同様のエラーが発生しました。

4

2 に答える 2

30

少し恥ずかしいです。しかし、少し調査した後(事前に行うべきでした:P)、答えが得られました。

http://jdanyow.github.io/aurelia-converters-sample/に示すように、ValueConverter を使用して実行できます。

そして、私はそれがかなりクールだと思います。

今私のコードは次のようになります:

<div class="col-sm-7  col-md-7 col-lg-7 alert alert-danger" if.bind="errors | hasPropertyValue:'Key':'car.Model'">
    <span repeat.for="error of errors | filterOnProperty:'Key':'car.Model'">
        <span>
           ${error.Message}
        </span>
    </span>
</div>

valueconverters.tsそして、TypeScript ( )でいくつかの valueconverters を定義しました。

export class FilterOnPropertyValueConverter {
toView(array: {}[], property: string, exp: string) {

    if (array === undefined || array === null || property === undefined || exp === undefined) {
        return array;
    }
    return array.filter((item) => item[property].toLowerCase().indexOf(exp.toLowerCase()) > -1);
}
}

export class HasPropertyValueValueConverter {
toView(array: {}[], property: string, exp: string) {

    if (array === undefined || array === null || property === undefined || exp === undefined) {
        return false;
    }
    return array.filter((item) => item[property].toLowerCase().indexOf(exp.toLowerCase()) > -1).length > 0;
}
}

そして、私は最終的にこれらを私の見解にインポートしました:<import from="yourPath/valueconverters"></import>

于 2015-03-20T09:40:15.557 に答える