0

背景: ページに 2 つのドロップダウンがあり、それらが変更されると、AEFXX の JQote プラグインを使用して、返された 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 : How to test an empty Object from 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 の最後の部分を修正して null 値の可能性を考慮したり、AJAX 成功関数を修正してこのケースを正しく処理したりするにはどうすればよいですか?

4

1 に答える 1

0

私が以前に試していたものと同様の解決策を見つけました:

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);
  });
}

ただし、この問題を処理するためにテンプレートファイルを変更する ソリューションにはまだ関心があります。

別の答えがあれば投稿してください!

于 2011-10-08T03:02:07.187 に答える