-1

これは、ProcessMaker と呼ばれる BPM アプリケーションに関連していますが、ロジックと構文は比較的同じである必要があります。非表示フィールドにデータが渡された別のシリアル化されたグリッドからグリッド (基本的にはテーブル) を作成しようとしています。

非表示フィールドに渡されるデータは、次のようにフォーマットされます。

元:

{"1":{"id":"4332","product":"ball","price":"$5.00",”ordered":"On"}

processmaker の wiki にある以下の JavaScript の例は、非表示フィールドをオブジェクトとして非シリアル化し、その情報を使用して、名前が何であれ新しいグリッドを設定します。processmaker の wiki の例では eval 関数を使用していますが、これを json.parse() 関数を使用してどのように変換しますか?

        function populateGrid() {
           var grd = getObject("newAccountsGrid");
           //remove all existing rows in the grid (except the first one): 
           var i = Number_Rows_Grid("newAccountsGrid", "accId");
           for (; i > 1; i--)
              grd.deleteGridRow(i, true);
           //The first row can't be deleted, so clear the fields in the first row:
           for (i = 0; i < grd.aFields.length; i++)
              getGridField("contactsGrid", 1, grd.aFields[i].sFieldName).value = "";
           //unserialize the hidden field as an object:
           var oAccounts = eval('(' + getField("sAccounts").value + ')'); 
           if (typeof oAccounts == 'object') { 
              for (var rowNo in oAccounts) {
                 if (rowNo != 1)
                    grd.addGridRow();
                 getGridField('newAccountsGrid', rowNo, 'accId').href = oAccounts[rowNo]["accountId"];
                 getGridField('newAccountsGrid', rowNo, 'accName').href = oAccounts[rowNo]["accountName"];
                 getGridField('newAccountsGrid', rowNo, 'createDate').href = oAccounts[rowNo]["created"];
              }
           }
        }
        populateGrid(); //execute when the DynaForm loads
4

3 に答える 3

1

それは次のように簡単です:

var oAccounts = JSON.parse(getField("sAccounts").value);
于 2012-12-28T00:48:10.023 に答える
0

eval("("+something+")")JSON.parse(something)

于 2012-12-28T00:49:42.583 に答える
0

Just a few lines above this example (ProcessMaker wiki), is a note where recommend using JSON.parse (). Using your example, your code should be as follows:

    function populateGrid() {
   var grd = getObject("newAccountsGrid");
   //remove all existing rows in the grid (except the first one): 
   var i = Number_Rows_Grid("newAccountsGrid", "accId");
   for (; i > 1; i--)
      grd.deleteGridRow(i, true);
   //The first row can't be deleted, so clear the fields in the first row:
   for (i = 0; i < grd.aFields.length; i++)
      getGridField("contactsGrid", 1, grd.aFields[i].sFieldName).value = "";
   //unserialize the hidden field as an object:
   var oAccounts = JSON.parse(getField("sAccounts").value); 
   if (typeof oAccounts == 'object') { 
      for (var rowNo in oAccounts) {
         if (rowNo != 1)
            grd.addGridRow();
         getGridField('newAccountsGrid', rowNo, 'accId').href = oAccounts[rowNo]["accountId"];
         getGridField('newAccountsGrid', rowNo, 'accName').href = oAccounts[rowNo]["accountName"];
         getGridField('newAccountsGrid', rowNo, 'createDate').href = oAccounts[rowNo]["created"];
      }
   }
}
populateGrid(); //execute when the DynaForm loads
于 2013-05-17T16:48:45.483 に答える