0

UI 要素の動的リストを構築しようとしています。UI リストをハードコーディングできるようになり、すべて正常に動作します。ただし、これを拡張可能にしたいので、idタグと対応する関数を渡す方法を考えようとしています。基本的に、正しいデータを投稿し、正しい応答を受け取っていますが、ajax 呼び出しのコールバック関数は実行されていません。コードは次のとおりです。

myModule = function () {
  var titleUI = Object.create(ChainUI());
  var memcachedId = '<?php echo $memcachedId;?>';
  return {
    printChain: function(data) {
      alert("printchain");
      var territories = jQuery.parseJSON(data);
      titleUI.makeChainTable();
      territories.forEach(function(territory) {
        titleUI.territoryDisplay(territory);
      }); 
      titleUI.tableDecorator($('#chainTable'));
    },
    loadChain: function() {
      titleUI.destroyChainTable();
      var url = 'traffichandler.php';
      var instruction = {'instruction': 'titleChain', 'method': 'printChain', 'memcachedId': memcachedId.toString()};
      $.post(url, instruction, this.printChain);
    },
    loadDefault: function() {
      titleUI.loadUI(['Title Chain'], [this.loadChain]);
    }
  };
}();

対応する titleUI コードは次のとおりです。

var ChainUI = function() {
 return {
 loadUI: function(uiList, funcList) {
  $('#uiFunctions').empty();
  for(var i in uiList) {
    var toDom = '<li id="'+uiList[i]+'">';
    toDom += uiList[i];
    toDom += '</li>';
    $('#uiFunctions').html(toDom);
  }
  for(var i = 0; i < uiList.length; i++) {
    var myFunc = funcList[i];
    $('#uiFunctions').delegate($('#'+uiList[i]), "click",
      function() {myFunc();}
    );
  }
},

}

myModule.loadDefault で、this.loadChain を起動できます。$.post 内で this.printChain を動作させることはできません。すべての動的なものを削除すると、 this.printChain は問題なく動作します。構文にこだわりすぎないでください。私の側では構文は問題ありません。ajaxコールを機能させるにはどうすればよいですか? ありがとう!

4

0 に答える 0