如何将“this”传递给.getJSON()方法中的嵌套.each()循环中的函数

时间:2012-05-14 22:12:37

标签: jquery json scope this each

所以我知道问题是什么,但我不知道解决问题的正确方法(语法)。

如果从“myFunction”获取代码并将其放在我调用“myFunction”的.each循环中,那么我的代码可以工作,因为“this”正在定义,并且在我所在的JSON对象的范围内参考

但是,当我编写我的函数并将其声明在JSON对象的范围之外时,它不再知道“this”是什么并返回值“undefined”。

如何将“this”作为参数传递给我的函数,以便我可以正确获取值?

    $.getJSON('labOrders.json', function(json) {
    var aceInhibitors = "",
        antianginal = "",
        anticoagulants = "",
        betaBlocker = "",
        diuretic = "",
        mineral = "",
        myFunction = function () {
            aceInhibitors += "<div class='row drugLineItem'>",
            aceInhibitors += "<div class='columns moneydot' style='background:none;'></div>",
            aceInhibitors += "<div class='columns drugTitleWrap'>",
            aceInhibitors += "<div class='row drugTitle'>"+this.name+"</div>",
            aceInhibitors += "<div class='row drugDose'>"+this.strength+"</div>",
            aceInhibitors += "<div class='columns'></div>",
            aceInhibitors += "<div class='columns orderDeets dxRefill'>"+this.refills+"</div>",
            aceInhibitors += "<div class='columns orderDeets dxPillCount'>"+this.pillCount+"</div>",
            aceInhibitors += "<div class='columns orderDeets dxSig'>"+this.sig+"</div>",
            aceInhibitors += "<div class='columns orderDeets dxRoute'>"+this.route+"</div>",
            aceInhibitors += "<div class='columns orderDeets drugTab'>"+this.dose+"</div>"
        }

  $.each(json.medications, function(index, orders) {
    $.each(this.aceInhibitors, function() {
        myFunction();

    });
    $.each(this.antianginal, function() {

    });
  });

  $('#loadMedSections').append(aceInhibitors);



});

2 个答案:

答案 0 :(得分:3)

您有两种选择:

 $.each(this.aceInhibitors, myFunction);

不需要包装函数,这将具有正确的上下文。

第二个选项:

$.each(this.aceInhibitors, function() {
    myFunction.call(this);
});

这将调用它将包装函数的上下文。

答案 1 :(得分:1)

有一个名为call的函数,可让您为this设置显式值。

如果您执行以下操作:

myFunction.call(someobject);

然后将使用myFunction调用this = someobject

在您的情况下,您可以这样做:

$.each(this.aceInhibitors, function() {
  myFunction.call(this); // will use the current value of "this" inside myFunction as well.
});