2011-12-14 3 views
1

При попытке подстроить объект, содержащий массив объектов, я получаю пустой массив, когда вижу, что у меня есть значения.Пытается использовать JSON для строения объекта, который содержит массив объектов.

filterDto: { 
      Expressions: [] 
     }, 

/* Using a tempArray to see if its an object issue of my filterDto.Expressions */ 

fnBuildFilterValues: function() { 

      var invoiceObj = this; 

      var tempArray = new Array(); 


       $("#tblExpressions tr").each(function() { 

       var doWeAddRow = false; 
       var filterObject = { 
        "Field": {}, 
        "Condition": {}, 
        "DataValue": {} 
       }; 

       $(this).find(":input").each(function() { 

        if ( $(this).attr('name') === 'ddlFieldExp') { 
         filterObject.Field = $(this).val(); 
        } 
        if ( $(this).attr('name') === 'ddlConditionExp') { 
         filterObject.Condition = $(this).val(); 
        } 
        if ( $(this).attr('name') === 'tbDataExp') { 
         filterObject.DataValue = $(this).val(); 
        } 

       }); /* Inner loop */ 

       tempArray.push(filterObject); 

       }); /* Outer loop */ 

       invoiceObj.filterDto.Expressions = tempArray; 
     }, 

И то, что я хочу использовать что-то вроде:

 var objToString = {}; 
    objToString = JSON.stringify(invoiceObj.filterDto) 

Я попытался с помощью = {}, как средство, но я до сих пор в конечном итоге с ObjToString быть пустым, когда мой массив заполняется. Это шоу, как это: {"Expressions":[]}

Если я делаю quickwatch в VS в правой части, то JSON.stringify я получаю это:

JSON.stringify(invoiceObj.filterDto) 
    "{"Expressions":[{"Field":"6","Condition":"0","DataValue":"2"}]}" String 

Но почему же ObjToString показывает пустой результат?

+0

invoiceObj.filterDto.Expressions = tempArray; – cjsmith

+0

Где вы делаете JSON.stringify()? Вы этого не показываете. Я предполагаю, что вы не делаете JSON.stringify() правильно. FYI, инициализация переменной объекту абсолютно ничего не делает, когда вы просто назначаете ей что-то еще. – jfriend00

+0

Я могу сделать var test = JSON.stringify (invoiceObj.filterDto) прямо под выходом этой функции, и получаю тот же результат. Я вызываю stringify позже внутри сообщения jqGrid, но перед этим возникает проблема с тем, как этот объект форматируется из JSON. – cjsmith

ответ

0

Код, который вы вставили, работает нормально, как показано by this code (сериализация JSON в console.log).

Является ли ваша проблема, что fnBuildFilterValues не вызывается перед попыткой сериализации? Ваша проблема в том, что любой из ваших селекторов не дает никаких результатов? Проблема не связана с вставленным кодом.

+0

Да, это именно то, что происходит. Я вызываю fnBuildFilterValues, затем перезагружаю сетку после возвращения функции: $ ('# gridMaster'). Trigger ("reloadGrid"); но его перезагрузка без обновленных postData и использование первой записи postdata каждый раз (пустая версия курса) Спасибо за то, что вы нажимаете. – cjsmith