0

アップショットのRemoteDataSourceをフィルタリングしようとしています。setFilter関数を使用すると、フィルターの配列を渡すことができますが、現時点では、適用するか(filter1 AND filter2)、または(filter1 OR filter2)を指定する方法はありません。upshot.jsコードを調べると、次の理由がはっきりとわかります。

$.each(query.filters, function (index, filter) {
    if (filterParameter) {
        filterParameter += " and ";
    }
    filterParameter += applyOperator(filter.property, filter.operator, filter.value);
});

ご覧のとおり、「and」はアップショットにハードコードされています。フィルタ間で「または」をサポートする他の方法はありますか、それとも手動で変更する必要がありますか?また、変更する必要がある場合、新しいバージョンのアップショットに更新したときに変更が破棄されないようにするための最善のアプローチは何ですか?

これは、 ASP.NETフォーラムの質問と同じです。

4

1 に答える 1

0

私はそれが恐ろしいハックであることを知っていますが、あなたはこれを行うことができます

self.dataSource.setFilter({ 
    property: "(CustomerId eq 1) or (CustomerId eq 2) and true", 
    operator: "==", 
    value: true });

基本的に、アップショット フィルターは、OData $filter の上にある非常に漏れやすい抽象化であることを理解する必要があります。したがって、「プロパティ」では、「true==true」で終了する限り、必要な OData フィルターを記述できます。

SQL インジェクション技術を思い出します。ブログhttp://bartjolling.blogspot.com/2012/04/building-single-page-apps-with-aspnet.htmlで Upshot のデータ操作について説明しました。

私の結論は、実際のビジネス アプリケーションの準備が整うにはまだほど遠いということでした。

于 2012-04-04T12:24:39.800 に答える