2012-03-21 36 views
0

我想篩選一個結果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 $過濾器頂部一個非常抽象泄漏。因此,在'屬性'中,您可以編寫任何您想要的OData過濾器,只要您以「true == true」結尾即可。

提醒我注意SQL注入技術。我在我的博客上介紹了Upshot中的數據操作http://bartjolling.blogspot.com/2012/04/building-single-page-apps-with-aspnet.html

我的結論是,它離準備好真正的商業應用程序還有很遠的距離。

+0

我想這也是一個選項,但是當你擁有動態過濾器屬性時,建立和維護似乎過於困難。由於它無論如何都是黑客攻擊,因此只需修改結果中的代碼就可以更容易地考慮到將在過濾器之間設置「和」或「或」的第四個參數。 – 2012-04-07 19:44:53

+0

您問題中的代碼似乎來自Upshot的「DataProvider.OData.js」部分。如果我正確讀取RemoteDataSource的構造函數,則可以將自己的自定義dataProvider作爲參數傳遞給RemoteDataSource。這將允許您按照您的要求進行過濾,而無需更少的維護問題 – 2012-04-10 12:11:07

相關問題