2014-10-02 1 views
0

req.payload.reps + numberreq.payload.kilos + number의 광범위한 목록이 필요없고 req.payload.reps - req.payload.kilos의 단일 쌍이 있지만 스키마에 전달 된 데이터의 수에 따라 자동 증가하는 방법은 다음과 같습니다. 그 이름들? 나는 input 필드의 name 속성을 증가하는 카운터를 사용하지 않는 경우hapijs 자동 증가 페이로드 인덱스

은 또한, repskilos의 값은 데이터베이스에 두 개의 배열로 저장하세요. 나중에 해당 값을 일치시키는 것이 더 쉬울까요, 아니면 제가 미리 물어 보았 듯이 스키마를 설정하는 것이 더 합리적일까요?

예를 들어, req.payload.reps[i]과 같은 것을 가지고 있습니다. 그런 식으로 사용자가 입력 필드에 10 개 미만의 값을 보내는 경우 데이터베이스에 빈 개체를 게시하지 않고 스키마 형식을 유지 관리하여 사용자가 원하는만큼 많은 입력 값을 보낼 수 있습니다.

서버 측에 hapijs을 사용하고 있습니다.

내 라우터 기능 :

에 카운터를 추가
var sendWorkout = { 
    handler: function(req, reply){ 


     var d = new Date(); 
     var cd = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear(); 

     console.log(req.payload); 

     // sets schema for workout 
     // this needs to be the data from the form and then should be validated with joi!!! 
     var workoutSchema = { 
      // "personId": "personId", //to later be replaced with actual username 
      "date": cd, 
      "workout": [ 
       { 
       "exercise": req.payload.exercise, 
       "musclegroup": req.payload.musclegroup, 
       "sets": [ 
        { 
        "reps": req.payload.reps, 
        "kilos": req.payload.kilos 
        }, 
        { 
        "reps": req.payload.reps1, 
        "kilos": req.payload.kilos1 
        }, 
        { 
        "reps": req.payload.reps2, 
        "kilos": req.payload.kilos2 
        }, 
        { 
        "reps": req.payload.reps3, 
        "kilos": req.payload.kilos3 
        }, 
        { 
        "reps": req.payload.reps4, 
        "kilos": req.payload.kilos4 
        }, 
        { 
        "reps": req.payload.reps5, 
        "kilos": req.payload.kilos5 
        }, 
        { 
        "reps": req.payload.reps6, 
        "kilos": req.payload.kilos6 
        }, 
        { 
        "reps": req.payload.reps7, 
        "kilos": req.payload.kilos7 
        }, 
        { 
        "reps": req.payload.reps8, 
        "kilos": req.payload.kilos8 
        }, 
        { 
        "reps": req.payload.reps9, 
        "kilos": req.payload.kilos9 
        }, 
        { 
        "reps": req.payload.reps10, 
        "kilos": req.payload.kilos10 
        }, 
       ] 
       } 
      ] 
     }; 


     // defines unique key for data 
     var key = cd + req.payload.exercise; 
     console.log(key); 

     // adds payload to database 
     db.add(key, workoutSchema, function(error, results){ 
      if (error) { 
       console.log("Coushbase error: " + error); 
       reply(error + "\n"); 
      } 
      console.log(results); 
      reply(workoutSchema); 
     }); 
    } 
}; 

내 jQuery를 input 필드의 name :

$(document).ready(function() { 
    console.log('Document ready'); 

    var counter = 0; 

    // function to add sets to specific exercise 
    $('#add-set').on('click', function() { 
    console.log ('Button add-set clicked'); 
    counter += 1; 
    console.log(counter); 

     var htmlSets = '<div class="sets">' + 
      '<label for="reps" class="labels">Reps</label><input type="text" name="reps' + counter +'" class="reps-column" placeholder="How many reps?" />' + 
      '<label for="kilos" class="labels">Kg\'s</label><input type="text" name="kilos' + counter +'" class="kilos-column" placeholder="How much Kg?" />' + 
     '</div>'; 

    $('div.sets:last').append(htmlSets); 
    }); 

}); 

그리고 내 HTML :

 <div id="forms"> 
      <form id="workout-form" name="workout-form" action="newworkout/workout" method="POST" enctype="application/x-www-form-urlencoded"> 

       <div class="workouts"> 
        <label for="exercise" class="labels"><strong>Exercise</strong></label> <input type="text" name="exercise" id="exercise" placeholder="Which exercise?" autofocus /> 
        <label for="musclegroup" class="labels"><strong>Muscle-Group</strong></label> <input type="text" name="musclegroup" id="musclegroup" placeholder="Which muscle-group?" /> 

        <div class="sets"> 
         <label for="reps" class="labels">Reps</label> <input type="text" name="reps" class="reps-column" placeholder="How many reps?" /> 
         <label for="kilos" class="labels">Kg's</label> <input type="text" name="kilos" class="kilos-column" placeholder="How much Kg?" /> 
        </div> 
        <hr> 
       </div> 

       <button id="add-set"class="add-buttons" type="button"><i class="fa fa-plus-circle fa-2x"></i></button> 
       <button id="submit-workout" type="submit"><strong>Save Workout</strong></button> 
      </form> 
     </div> 

    </main> 
+0

안녕하세요 @hyprstack, 내 제안을 시도 했습니까? – John

답변

0

변경하여 jQuery를하는 것이 될 다음 (입력 이름에 대괄호를 적어주십시오) :

var htmlSets = '<div class="sets">' + 
     '<label for="reps" class="labels">Reps</label><input type="text" name="reps[' + counter +']" class="reps-column" placeholder="How many reps?" />' + 
     '<label for="kilos" class="labels">Kg\'s</label><input type="text" name="kilos[' + counter +']" class="kilos-column" placeholder="How much Kg?" />' + 
    '</div>'; 

두 개의 배열, repskilos을 보내 그런 식으로. 문제를 해결해야합니다 :)