0

私は数日前に Javascript のクロージャー バグにひどく悩まされていましたが、忙しすぎて質問できませんでした。jQueryテンプレートエンジンで以下のようなことを試みています。

<ul id="container"></ul>
<script type="text/jq-tmpl" id="myTmpl">
  <li>
    <span style="background:#fafafa">X:${X}</span>
    <span style="background:#ababab">Y:${Inner.Y}</span>
    <span style="background:#9a9a9a">Z:${Inner.Z}</span>
  </li>
</script>

function OuterObject(x,y,z){
  this.X = x;
  this.Inner = InnerObject(y,z);
}

function InnerObject(y,z){
  this.Y=y;
  this.Z=z;
}

$(function(){
  var l=[];
  l.push(OuterObject(1,"One","inner-1"));
  l.push(OuterObject(2,"Two","inner-2"));
  $("#myTmpl").tmpl(l).appendTo("#container");
});

問題は、レンダリングされた両方のアイテムに対して表示されることですinner-2Two私も次のように試しました:

var a=OuterObject(1,"One","inner-1");
l.push(a);
var b=OuterObject(2,"Two","inner-2");
l.push(b);

しかし、すべて同じです。

4

1 に答える 1

2

コンストラクター関数を呼び出すときに「new」を使用する必要があるようです。

例えばnew Outerobject(...)new InnerObject(...)

それ以外の場合、thisオブジェクトは返されません。

于 2012-07-19T05:01:58.480 に答える