2017-12-21 1 views
0

"문제"목록이 있습니다. 각 사안에는 _id와 이름이 있습니다.{{#}} 블록 내의 CustomHelper

나는 "거래"를하고 있습니다. 모든 트랜잭션은 transaction.matterId 속성을 통해 사안의 _id를 참조하여 사안에 속합니다.

현재 거래가 변경되도록 허용하기 위해 사용자 인터페이스에서 작업하고 있습니다 (거래가 지정된 사항 변경 포함). 이처럼 :

나는 부트 스트랩 각 문제에 대한 옵션을 사용하여 입력을 선택 생성하기 위해 핸들을 사용하고
Enter date: 

Select a matter: (this is the culprit) 

Enter the amount: 

- 즉, "문제를 선택 ..."이 쉽게 핸들 {{# 각}} 블록으로 이루어집니다 돕는 사람. 모든 문제가 옵션으로 올바르게 표시되며 각 옵션의 값이 올바르게 지정됩니다. 지금까지 아무런 문제가 없습니다 ...

그러나이 값은 update.MatterId와 일치하는 옵션을 업데이트 화면이므로 미리 선택해야합니다. 이를 위해 {{# each}} 블록 내에서 사용자 정의 "IfEquals"도우미를 호출합니다. 핸들 템플릿은 다음과 같이이다 :

<div>Matter: {{ transaction.matterId}}</div> <-- I can see the matterId here. 
<div class='form-group'> 
    <label for="selMatter">Case</label> 
    <select required id="selMatter" name="matterId" class="form-control"> 
     {{# each matters }} 
      <option value='{{ _id }}' {{ ifEqual _id ../transaction.matterId "selected" "" }} >{{ name }}</option> 
     {{/ each }} 
    </select> 
</div> 

사용자 지정 도우미는 이것이다 :

ifEqual: function (obj, value, trueString, falseString) { 
     return ((obj===value) ? trueString : falseString); 
} 

의 제 1 회 <div>을 가정 해 봅시다은 "5"의 transaction.MatterId을 보여줍니다 값이 "5"인 하나의 옵션 만있을 것입니다.

핸들 바 템플릿에서 나는 2 개의 값을 적절하게 비교하기 위해 {{IfEqual}}을 (를) 얻을 수있는 모든 종류의 가능성을 시도했습니다. "../"없이 transaction.matterId를 시도하여 컨텍스트 문제인지 여부를 확인했습니다. 불운. 나는 (심지어 자신의 도우미 함수로) 핸들 바 부분 표현식을 사용해 보았습니다. 아니.

{{IfEqual}} 도우미에서 적절한 값을 가져 오지 못하고 있는데, 일치하는 <option>이 있어도 "선택됨"특성을 핸들 막대에 추가 할 수 없습니다.

여기 내가 볼만한 곳이라고 생각하지만, 내가 무엇을 놓치고 있는지 보지 못했습니다. http://handlebarsjs.com/expressions.html

+0

템플릿은 나에게 잘 나타납니다 . '_id'와'transaction.matterId'가 String과 Number와 같은 다른 타입 인 경우 이것이 작동하지 않을 것이라고 생각할 수있는 유일한 이유가 있습니다. – 76484

+0

@ 76484 그들은 서로 다른 유형이라고 생각합니다. 따라서 toString()은 아래의 답변에서 캐스팅됩니다. 위의 코드에서 원래의 {{ifEqual}} 도우미를 .toString()과 함께 사용하려고 시도했지만 handlebars가 parseError를 사용하여이를 거부합니다. 그것은 .toString()을 좋아하지 않습니다. 상자 수정 프로그램이 없거나 아래의 다른 사용자 지정 도우미에 의존해야합니까? –

+1

수정 프로그램이 실제로 데이터 영역에 있어야하며 ID는 항상 일관된 형식이어야합니다. 이것이 가능하지 않다면'toString' 커스텀 도우미를 만들어서 'ifEqual' 헬퍼에 전달하기 전에 문자열을 스트링 할 것을 권한다.양자 택일로,'ifEqual' 헬퍼를 업데이트하여'obj'와'value'를 문자열에 캐스트 할 수 있습니다.하지만 헬퍼가 조금 정직하지 못하기 때문에이 접근법을 좋아하지 않습니다. – 76484

답변

0

글쎄, 나는 그것을 마침내 얻었다. 사람이이 시나리오를 통해 온다면, 여기에 나를 위해 일한 내용은 다음과 같습니다

핸들 템플릿 : 여기

<div class='form-group'> 
    <label for="selMatter">Case</label> 
    <select required id="selMatter" name="matterId" class="form-control"> 
     {{# each matters }} 
      {{{ makeOption _id ../transaction.matterId name }}} 
     {{/ each }} 
    </select> 
</div> 

는 {{{makeOption}}} 도우미입니다 :

makeOption: function (optionValue, dataValue, displayText) { 
    myOption = "<option value='" + optionValue + "'"; 

    if (optionValue.toString() === dataValue.toString()) 
    myOption += " selected"; 

    myOption += ">" + displayText + "</option>"; 

    return myOption; 
}, 
관련 문제