2010-12-13 5 views
1

화면에 표시되는 송장 목록이 있습니다. 현재 사용자는 체크 박스를 사용하여 송장을 선택하거나 선택을 취소하거나 지불하려는 금액을 변경할 수 있습니다. 이 경우 모든 송장에 대해 지불 할 금액이 합산되어 표시됩니다.jquery 내의 json 컬렉션 수정

궁극적 인 목표는 서버에서 오는 데이터 배열의 배열을 추적하는 것입니다. 표준화되었으므로 json을 사용하고 있습니다.

가 그럼 난과 같이 JSON 데이터에 숨겨진이 : 지금

<input id="InvoicingGridRows" name="InvoicingGridRows" type="hidden" 
value="[[{&quot;Value&quot;:&quot;TST-1000&quot;},{&quot;Value&quot;:346.230000}, 
{&quot;Value&quot;:null},{&quot;Value&quot;:null},{&quot;Value&quot;:null}, 
{&quot;Value&quot;:null}], 
[{&quot;Value&quot;:&quot;TST-1001&quot;}, 
{&quot;Value&quot;:126.970000},{&quot;Value&quot;:null},{&quot;Value&quot;:null}, 
{&quot;Value&quot;:null},{&quot;Value&quot;:null}]]" /> 

, 데이터는 데이터에 대한 빈 자리가 많이 있습니다.

내가 뭘하려는 건 합계가 발생하기 때문에 이벤트가 발생하면 이벤트 편집/삭제/추가를 시작할 수 있도록 자바 스크립트 개체를 만드는 것입니다. 여기까지 내가 지금까지 가지고있는 것.

var invoiceRows = function() { 
    var targetControl = ''; 

    var getByInvoiceId = function (invoiceId) { 
     var data = $(targetControl.val()); 

     for (var x = 0; x < data.length; x++) { 
      if (data[x][0].Value == invoiceId) 
       return data[x]; 
     } 

     return null; 
    }; 

    return { 

     init: function (selector, invoices) { 
      targetControl = $(selector); 

      //set up the gridrows to defaulted values 
      targetControl.val(invoices); 
     }, 

     save: function (invoiceId, amount) { 
      var invoiceData = getByInvoiceId(invoiceId); 

      if (invoiceData) { 
       //update 
      } else { 
       //add new 
      } 
     }, 

     remove: function (invoiceId) { 
      //remove row with invoiceid 
     } 

    } 

}(); 

내 질문은 내가 쉽게 수정 어떻게하다/행을 삭제뿐만 아니라 내 JSON 개체에 새 행을 추가 한 다음 숨겨진 필드에 다시 저장? 그것도 가능하거나 더 좋은 방법이 있습니까? 나는 제안에 개방적이다. 이와 개체를 제거 할 때

var dataObj = eval($("#InvoicingGridRows").val()); 

내가 한 번만 할 거라고 다음 모든 작업을 수행합니다

답변

1

당신은 eval를 사용하여 자바 스크립트 객체로 숨겨진 입력에 문자열을 변환 할 수 있습니다. 서버로 다시 보낼 준비가되면 다시 문자열로 개체를 변환 :

var dataStr = JSON.stringify(dataObj); 
$("#InvoicingGridRows").val(dataStr); 

을 다른 방법으로, 데이터를 포함하는 <script> 태그를 생성하기 위해 서버를 서버의 작동 방식을 수정 얻을 수 있다면 javascript 객체로 사용할 준비가되었습니다 - 기본적으로 숨겨진 입력의 문자열이지만 모든 것을 둘러싼 따옴표없이 변수 앞에 값이 지정되지 않아야합니다. 예 : 서버를 출력 해달라고하십시오 : 지금 필요 없음.