Элемент JSON имеет значение null, что приводит к "Uncaught TypeError:"для JQote2 - PullRequest
0 голосов
/ 07 октября 2011

Справочная информация : у меня есть две выпадающие страницы на моей странице, и когда они меняются, я использую плагин JQote от AEFXX, чтобы заполнить таблицу некоторыми из возвращенных данных JSON.В ответе JSON некоторые из пользовательских историй имеют связанные с ними задачи, но с этими задачами не так много информации, поэтому мне пришлось выполнить дополнительный запрос GET для каждой из задач, чтобы вернуть эту информацию.Некоторые из возвращаемых задач не имеют назначенного владельца, в результате чего в поле Task.Owner = null.

Вот код, который я использую для получения каждой из задач:

if(result.Tasks != ""){
 $.each(result.Tasks, function(i, tasks){
    console.log(tasks._ref);
    $.ajax({
        url: tasks._ref,
        dataType: 'jsonp',
        jsonp: 'jsonp',
        success: function(data, textStatus, jqXHR) {
            $.get("task.tpl", function(tmpl) {
                $("#reqs").jqoteapp(tmpl, data.Task);
                });
            }
    });
 })
}

Шаблон (task.tpl) выглядит следующим образом:

<tr id="infoReturned">
  <td name="id" class="row"><%= this.FormattedID %></td>
  <td name="name" class="row"><%= this._refObjectName %></td>
  <td name="state" class="row"><%= this.State %></td>
  <td name="owner" class="row"><%= this.Owner._refObjectName %></td>
</tr>

Trial : я ссылался на Как проверить пустой объект из JSON ,

Я добавил следующую функцию:

        function isEmpty(obj) {
            for (var prop in obj) {
                if (obj.hasOwnProperty(prop))
                    console.log("false");
                    return false;
            }
        }

, изменил функцию успеха GET таким образом:

success: function(data, textStatus, jqXHR) {
 if (isEmpty(data.Task.Owner)){
    $.get("emptyTask.tpl", function(tmpl) {
    $("#reqs").jqoteapp(tmpl, data.Task);
    });                                         
 }
 else {
    $.get("task.tpl", function(tmpl) {
    $("#reqs").jqoteapp(tmpl, data.Task);
    });
 }

}

,и создал новый файл шаблона (emptyTask.tpl) с пустым разделом владельца:

<tr id="infoReturned">
 <td name="id" class="row"><%= this.FormattedID %></td>
 <td name="name" class="row"><%= this._refObjectName %></td>
 <td name="state" class="row"><%= this.State %></td>
 <td name="owner" class="row"></td>
</tr>

, но я все еще получаю сообщение об ошибке:

Uncaught TypeError: <unknown message TemplateExecutionError>
(anonymous function)
$.extend.jqotejquery.jqote2.js:107
$.each.$.fn.(anonymous function)jquery.jqote2.js:76
$.ajax.success.$.each.$.each.$.ajax.successpy2Test.html:155
jQuery.extend._Deferred.deferred.resolveWithjquery-latest.js:1016
donejquery-latest.js:7247
jQuery.ajaxTransport.send.callbackjquery-latest.js:8028

Вопрос : Как я могу исправить последнюю часть task.tpl, чтобы учесть возможные нулевые значения, или изменить функцию успеха AJAX для правильной обработки этого случая?

1 Ответ

0 голосов
/ 08 октября 2011

Нашел решение, похожее на то, что я пробовал ранее:

if ((data.Task.Owner) == null){
  $.get("emptyTask.tpl", function(tmpl) {
  $("#reqs").jqoteapp(tmpl, data.Task);
  });                                           
}
else {
  $.get("task.tpl", function(tmpl) {
  $("#reqs").jqoteapp(tmpl, data.Task);
  });
}

Я по-прежнему заинтересован в решении, в котором файл template был изменен для решения этой проблемы.

Пожалуйста, напишите, если у вас есть другой ответ!

...