2013-11-15 2 views
4

breeze를 사용하여 서버의 데이터를 쿼리하고 있는데 문제가있는 것 같습니다. 이 데이터를 필터링하고 사례를 무시하거나 필드의 값을 소문자로 만드는 방법이 있습니까? 예 :breeze를 사용하여 대소 문자를 구분하는 방법 FilterQueryOp

var term = "john"; 
query = query.where("Name", "contains", Term); 

'이름'필드, 그것은 false를 반환 자본 'J'로 존을 포함하지만 '존'으로 용어를 변경하는 경우 true를 돌려주는 경우 오전 데 문제가 있습니다. 이것이 문제라는 것을 알고 있지만 어떻게하면 산들 바람을 무시할 수 있습니까? jquery.each를 사용하지 않고.

감사합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

3

좋아, 두 부분으로되어 있습니다. Breeze는 모든 localQueries에 사용되는 LocalQueryComparisonOptions 객체를 지원합니다.

var lqco = new breeze.LocalQueryComparisonOptions({ 
     name: "custom comparison options", 
     isCaseSensitive: false, 
     usesSql92CompliantStringComparison: true 
    }); 
    // either apply it globally 
    lqco.setAsDefault(); 
    // or to a specific MetadataStore 
    var ms = new breeze.MetadataStore({ localQueryComparisonOptions: lqco }); 
    var em = new breeze.EntityManager({ metadataStore: ms }); 

응용 프로그램을 시작할 때 한 번 설정해야합니다. 이 예에서이 지점 이후에 수행되는 모든 localQueries는 대소 문자를 구분하지 않습니다.

데이터베이스가 "일치"(데이터베이스 벤더에 따라 다름)로 설정되어 있지 않으면 서버에 대한 원격 쿼리가 다른 결과를 반환 한 다음 동일한 쿼리가 로컬로 적용됩니다.

기본적으로 Breeze는 "서버"측 구현을 설정할 수 없으므로 일반적으로 서버 측 데이터베이스 설정과 일치하는 localQueryComparisons 객체를 만드는 것이 좋습니다.

희망적입니다.

+0

뭔가가 누락되었거나 breeze.js가 최신이 아니지만이 오류가 발생하는 것 같습니다. '구성된 모듈 (viewmodels/shell)을로드하지 못했습니다. 세부 정보 : LocalQueryComparisonOptions이 정의되지 않았습니다. '그 방법으로 durandal에서 사용하고 있습니다. 빠른 반응에 감사드립니다. – dejobo

+0

죄송합니다. breeze.LocalQueryComparisionOptions이어야합니다. 게시물을 업데이트했습니다. –

+0

작품 !!! 처음에는 작동하지 않았지만 말한 것처럼 데이터베이스 설정을 일치 시키십시오. 그래서 데이터베이스에서 변경해야했습니다. 나는 Oracle DB를 사용하고 있습니다. 굉장해! 고마워요. – dejobo

1

누구든지 Oracle DB에서이 문제가 발생하면 위의 코드를 Jay Traband에서 추가 한 다음 로그온 트리거를 수정하여 DB 사용자의 세션 변수를 변경하십시오. 다음 값을 설정하십시오.

ALTER SESSION SET nls_comp = linguistic; ALTER 세션 설정 nls_sort = binary_ci

희망이 있으면 도움이됩니다. 나는 Breeze를 좋아한다!

3

내 의견으로는 이것에 더 간단한 접근법이 있습니다.

기본적으로 OData는 대소 문자를 구분하지만 문자열을 대문자 또는 소문자로 변환하는 함수를 제공합니다. 그래서 다음과 같이 간단하게 코드를 수정하여 서버에 대소 문자를 구분하지 쿼리를 발생합니다 :

var term = "john"; 
query = query.where("tolower(Name)", breeze.FilterQueryOp.Contains, term.toLowerCase()); 

따라서 하나로, OData는 낮은 변환 된 검색 문자열과 비교하기 전에 소문자로 피사체를 변형하라고 케이스를 서버에 보내기 전에.

관련 문제