2010-07-01 3 views
0

아래 javascript에서 "this"는 Car 객체를 나타내며 search_id는 "search_input"이라는 ID를 가진 입력 텍스트 필드를 참조합니다. 그래서 기본적으로 사용자는 필드의 텍스트를 입력하고 검색을 입력을 기반으로 발생합니다. 이제 val() 메서드가 입력 필드에서 사용자 입력 문자열을 가져 오는 것을 이해합니다. 그러나 split() 메서드의 콜론이 무엇을하는지 확신 할 수 없습니다. split() 메서드는 빈 문자열을 전달할 때 쉼표 구분 기호를 사용한다고 생각했습니다. 그리고 나서 splitted 변수는 입력에서 분리 된 문자열 배열을 보유하고있는 것처럼 보입니다. 그러나 왜 우리는 문자열 배열 (splitted [0])과 두 번째 문자열 (splitted [1])의 첫 번째 분류 문자열을 전달한 다음이를 string_to_scope 변수에 전달합니까? 기본적으로 검색을 만드는 과정에 있습니다. 그리고 내가 무슨 일이 일어나고 있는지 모르겠어요이 세 줄의 :split (":")에서 검색을 작성하여 객체로 색인화

var splitted = jQuery(this.search_id).val().split(": "); 
if (splitted[0] && splitted[1]){ 
    if (string_to_scope[splitted[0]]) ret[string_to_scope[splitted[0]]] = splitted[1]; 

여기에 더 문맥의 : 어떤 응답을

Car.prototype.filter_func=function(){ 
var ret={}; 
var string_to_scope = { 
    'Year': 'year_num_eq', 
    'Make': 'make_name_eq', 
    'Description': 'description_eq', 
    'Expiry': 'expires_on_eq' 
}; 
var search_value = jQuery(this.search_id).val(); 

if(search_value != null && search_value.length > 0){ 
    var splitted = jQuery(this.search_id).val().split(": "); 
    if (splitted[0] && splitted[1]){ 
     if (string_to_scope[splitted[0]]) ret[string_to_scope[splitted[0]]] = splitted[1]; 
    } 
} 
return ret; 
}; 

감사합니다.

답변

0

아이디어는 누군가가 "Make : Toyota"와 같은 검색을 입력하도록 허용하는 것입니다. 즉, 단일 검색 상자가 여러 필드 (어디에서 어떤 필드를 지정하는지)를 검색 할 수 있도록하는 것입니다. 좀 더 일반적인 접근법은 검색어와 분리 된 검색 유형에 대한 드롭 다운을 갖는 것입니다. 이것은 하나의 상자에 그들을 결합하려고합니다.

"split"메서드는 구분 기호가 포함 된 문자열을 사용하여 구분 기호 앞, 사이 또는 사이에 모든 내용이 포함 된 배열로 바꿉니다. 이 경우에는 "[Make", "Toyota"]에 "Make : Toyota"라는 문자가

개로 바뀝니다.

첫 번째 조각 (검색 유형)은 범위 해시의 키가되고 두 ​​번째 조각은 검색 용어가됩니다.

+0

jQuery (this.search_id) .val()이 'Make : Toyota'를 어떻게 반환하는지 이해하지 못했습니다. 사용자가 수행 할 수있는 유일한 작업은 make로 검색하려는 경우 'Toyota'를 입력 필드에 입력하는 것입니다. val()은 사용자 입력 문자열 ('Toyota')을 가져 오지 않습니까? – JohnMerlino

+0

그것은이 코드가 염두에두고있는 것처럼 보이지 않습니다. 검색은 사용자가 입력 한 검색 유형을 기반으로 쿼리를 작성하기 위해 string_to_scope 객체를 사용하여 { "make_name_eq": "Toyota"}와 같은 쿼리를 만들기 위해 사용자의 두 값을 사용합니다. 게시 한 코드는 확실히 콜론으로 구분 된 두 개의 값을 기대합니다. 작성된대로 사용자는 입력란에 "Make : Toyota"를 입력해야합니다.(콜론에서 분할 된 부분에 주목하고 결과 배열에 적어도 두 부분이 있는지 검사하는 if가 있습니다. 사용자가 "Toyota"를 입력하면이 코드는 아무 것도하지 않습니다.) –

0

스플릿은 소리가 나는 것과 같습니다. 문자열을 입력으로 나누고 배열을 반환합니다. 그래서 그것이 분할로 일어나는 일입니다. jQuery (this.search_id) .val(). split (":");

그런 다음 첫 번째 색인과 두 번째 색인에 대해 값이 설정되어 있는지 확인합니다. (스플릿 [0] & & 스플릿 [1]) 경우

그 첫번째 값 string_to_scope 객체의 속성의 이름과 일치하는 경우 그들은 검사되는 사실이라면. 배열과 비슷한 색인을 사용하여 객체 속성에 액세스 할 수 있습니다. if (string_to_scope [splitted [0]])

해당 이름의 등록 정보가있는 경우 첫 번째 분할 값이 두 번째 분할 값과 동일한 새 객체 ret가 반환됩니다. ret [string_to_scope [스플릿 [0]]] = 스플릿 [1];

1
// 'Year: 1998' -> ['Year', '1998']; 
var splitted = jQuery(this.search_id).val().split(": "); 

// if there were two parts 
// (the year is not missing) 
if (splitted[0] && splitted[1]){ 

    // if the key exists in string_to_scope object 
    // -> ok because string_to_scope['Year'] exists 
    if (string_to_scope[splitted[0]]) 

    // ret[ string_to_scope['Year'] ] 
    // -> ret['year_num_eq'] = '1998'; 
    ret[ string_to_scope[splitted[0] ] = splitted[1]; 
+0

저는 jQuery (this.search_id) .val()이 'Year : 1998'을 반환하는 방법을 이해하지 못합니다. 사용자가 수행 할 수있는 유일한 작업은 입력 필드에 연도별로 검색하려는 경우 '1998'을 입력하는 것입니다. 그리고 val()은 사용자 입력 문자열 ('1998')을 가져 오지 않습니까? 정확히 – JohnMerlino

+0

. 나는 왜 코드가 일을하는지 모른다. 나는 단지 그것이하고있는 일을 말하고있는 중이다. – galambalazs