0

だから私は問題が何であるかを知っていますが、それを修正するための適切な方法(構文)がわかりません。

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



});
4

2 に答える 2

3

次の 2 つのオプションがあります。

 $.each(this.aceInhibitors, myFunction);

ラッパー関数は必要ありません。それには正しいコンテキストがあります。

2 番目のオプション:

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

それは、ラッパー関数のコンテキストのコンテキストになります。

于 2012-05-14T22:18:45.493 に答える
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.
});
于 2012-05-14T22:19:31.253 に答える