我正在使用 Dojo 1.8 中的模块,并且我有一个这样定义的模块:
define(["dojo/request/xhr", "dojo/json"],
  function(xhr, JSON) {
  var url = "server/provider.php";
  return {
    files: {},
    getDirList: function() {
      var self = this;
      xhr(url).then(function(response) {
        response = JSON.parse(response);
        // would love to return the JSON for use here
      }, function(err) {
        console.error(err);
      });
    }
  };
});
我有另一个模块,我想在其中调用该方法然后使用它:
define(["dojo/dom",
        "dojo/dom-construct",
        "dojo/_base/array",
        "afm/utils"
        ],
function(dom,domConst,array, utils) {
  return {
    produceHtml: function() {
      var json = utils.getDirList(); //this returns undefined
      var dirLength = json.length;
      console.log(json);
      for (var i = 0; i < json.length; i++) {
        if(i % 2 === 0) {
          domConst.place('<tr class="even"><td>' + json[i].name + '</td></tr>', 'output');
        } else {
          domConst.place('<tr><td>' + json[i].name + '</td></tr>', 'output');
        }
      }
    }
  };
});
当然,我可以将 DOM 创建代码放入 util 模块中,但这是在不应该的地方混合视图逻辑。如果我想重用 util.getDirList 方法,那就太可怕了。
如何使用该方法返回的 JSON?还有其他人这样做吗?