2012-03-21 5 views
0

Upshot RemoteDataSourceをフィルタリングしようとしています。 SetFilter機能で、私は、フィルタの配列を渡すことができますが、現時点では、私は(フィルタ1フィルタ2)、または(フィルタ1ORフィルタ2を適用するかどうかを指定する方法はありません)。あなたが見ることができるようにUpshot setFilter

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

「と」は結論にハードコーディングされています。なぜupshot.jsコードを見ると、それがはっきりと見えます。フィルタ間に"または"をサポートする他の方法はありますか?それとも手動で修正する必要がありますか?そして、修正する必要がある場合、最新のバージョンのアップショットに更新するときに、私の修正が破棄されないようにするための最良のアプローチは何ですか?

これは、ASP.NET forumsと同じ質問です。

答えて

0

私はそれは恐ろしいハックだが、知っているあなたは、この

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

を行うことができます基本的に、あなただけの結論フィルタは、ODataの$フィルターの上に非常に漏れやすい抽象化であることを認識する必要があります。したがって、 'プロパティ'では、「true == true」で終了する限り、任意のODataフィルタを記述できます。

SQLインジェクション手法を思い出させます。私はブログでUpshotのデータ操作を扱った。http://bartjolling.blogspot.com/2012/04/building-single-page-apps-with-aspnet.html

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

+0

これもオプションだと思いますが、ダイナミックなフィルタプロパティがあるときは、構築して維持するのが非常に難しいようです。とにかくハックだから、フィルターの間に 'と'や 'や'を設定する第4のパラメーターを考慮して、アップショット内のコードを変更する方が簡単です。 –

+0

あなたの質問のコードはUpshotの "DataProvider.OData.js"部分から来ているようです。 RemoteDataSourceのコンストラクタを正しく読み込んだ場合、独自のカスタムdataProviderをパラメータとしてRemoteDataSourceに渡すことができます。これにより、メンテナンスの問題がなくても、フィルタリングすることができます –

関連する問題