2017-12-04 5 views
-3

내 요구 사항 :
1. 컬렉션에서 모든 레코드를 가져 와서 각각 아코디언으로 표시하십시오.
2. 레코드 필드에 대해서는 string/boolean 인 wheather를 확인해야합니다.
3. string/boolean 인 경우 각각 textBox/checkbox을 얻어야합니다.
의 Sample.txt
컬렉션에서 가져온 데이터에 따라 입력 유형을 textBox/CheckBox로 설정하는 방법은 무엇입니까?

<div class="container"> 
    {{#each listjobs}} 
     <i class="fa fa-close" style="font-size:30px;background-color:red;padding: 5px 10px;"></i> 
     <button class="accordion">{{job}}</button> 
     <div class="panel"> 
      <ul class="panel_elements"> 
        {{params}} 
        <li><input type="submit" name="trigger" value="Trigger" /></li> 
        <li id="status">{{status}}</li> 
      </ul> 
     </div> 
    {{/each}} 
</div> 

내 DB 항목 :이 필드 컬렉션 내부 문서의 대부분을 변경합니다.

"_id" : "8yfjmbMbv7KcNaKwz", 
    "platform" : "abcd", 
    "url" "http://<jenkins Address>/job/test/", 
    "job" : "testing", 
    "status" : "SUCCESS", 
    "parameters" : [ 
      { 
        "name" : "DIRECTORY", 
        "value" : "def" 
      }, 
      { 
        "name" : "BUILD_PROFILE", 
        "value" : "abc" 
      } 
    ] 
} 

sample.js

Template.trigger.events({ 
'click .accordion':function(){ 
    var jobId = this._id; 
    Session.set('selectJob', jobId); 
    var selectedPlayer =Session.get('selectJob'); 
    console.log(selectedPlayer); 
    var acc = document.getElementsByClassName("accordion"); 
    var i; 

    for (i = 0; i < acc.length; i++) { 
     acc[i].onclick = function() { 
     this.classList.toggle("active"); 
     var panel = this.nextElementSibling; 
     if (panel.style.maxHeight){ 
      panel.style.maxHeight = null; 
     } else { 
      panel.style.maxHeight = panel.scrollHeight + "px"; 
     } 
     } 
    } 
}, 
}); 

Template.trigger.helpers({ 
'params':function(){ 
    var selectedJob = Session.get('selectJob'); 
    console.log(selectedJob); 
    console.log(AddPipe.findOne({ "_id": selectedJob })); 
    /*var param=AddPipe.findOne({ _id: selectedJob},{_id:0,parameters:1}).fetch(); 
    for(var i in param){ 

    } 
    */ 
    return AddPipe.find({_id:selectedJob},{parameters:1}).map(function (c) {   
    return {label: c.parameters, value:c.parameters}; 
    }); 
}, 
+2

사용하여 모든 템플릿에 사용할 수 있도록 의미가 있습니다. 적어도 첫 발을 내놔. 키 목록을 제공하는 도우미를 만든 다음 키 유형 등을 제공하는 도우미를 만들거나 자동 서식 패키지 만 사용하십시오. –

+0

유감스럽게 생각한다면, 유성을 배우고 있으며, 마감 시간 내에 목표에 도달해야하기 때문에 최대한 빨리 완료해야합니다. 나는 운율에 대한 완전한 이해가 없기 때문에 구문 적으로 코드를 작성할 수 없었습니다. 나는 논리를 알고 있지만 유성에 쓰는 것은이 시점에서 나에게 조금 어렵다. @ uri 참조를 위해 JS 코드를 업데이트했습니다. @ MichelFloyd – Snkini

+1

"유성을 배우고 있습니다"... 더 ** ** 당신이 ** 더 ** ** 당신이 배울 코드를 작성하십시오. 현재 코드에서 실제 문제는 무엇입니까? –

답변

2

도우미 isBooleanisString, 또는 템플릿에서 다음 typeIs

Template.myTemplate.helpers({ 
    isBoolean(value) { 
    return typeof value === 'boolean'; 
    }, 
    isString(value) { 
    return typeof value === 'string'; 
    }, 
    typeIs(value, type) { 
    return typeof value === type; 
    } 
}); 

보다 일반적인 몇이, if

을 사용해야합니다 ,
<div class="container"> 
    {{#each listjobs}} 
     <i class="fa fa-close" style="font-size:30px;background-color:red;padding: 5px 10px;"></i> 
     <button class="accordion">{{job}}</button> 
     <div class="panel"> 
      <ul class="panel_elements"> 

       {{#if isBoolean recordsField}} 
        <li><input type="checkbox"></li> 
       {{/if}} 
       {{#if isString recordsField}} 
        <li><input type="text"></li> 
       {{/if}} 

        <li><input type="submit" name="trigger" value="Trigger" /></li> 
        <li id="status">{{status}}</li> 
      </ul> 
     </div> 
    {{/each}} 
</div> 

참고 :이 같은 도우미가 모든 곳에서 유용하기 때문에, 당신은 기본적으로 당신을 위해 코드의 꽤 상당한 금액을 작성하는 사람을 요구하고 Template.registerHelper