8

口ひげのRFCによると

基本テンプレートの {{name}} タグは、現在のコンテキストで name キーを見つけようとします。name キーがない場合、何もレンダリングされません。

したがって、私はこれを期待していました:

var template = '{{#anArray}}{{aString}}{{/anArray}}';

var json = {
    "aString":"ABC",
    "anArray": [1,{"aString":"DEF"}]
 };

レンダリングしたら私に与えるには:

"DEF"

ただし、mustache.js は親のスコープで値を探します。それは私に与えます

"ABCDEF"

コンテキストは実際にすべての親スコープを含めることを意味しますか?

http://jsfiddle.net/ZG4zd/20/

4

1 に答える 1

5

簡単な答え: はい。

もう少し長い答え。Context.prototype.lookupwhile ループを実行し、現在のコンテキストとその親コン​​テキストでトークンを検索しますが、親コンテキストが存在します。

関連するコードのビット:

Context.prototype.lookup = function (name) {
    var value = this._cache[name];

    if (!value) {
      if (name === ".") {
        value = this.view;
      } else {
        var context = this;

        //Iterate ancestor contexts
        while (context) {
          if (name.indexOf(".") > 0) {
            var names = name.split("."), i = 0;

            value = context.view;

            while (value && i < names.length) {
              value = value[names[i++]];
            }
          } else {
            value = context.view[name];
          }

          if (value != null) {
            break;
          }


          context = context.parent;
        }
      }

      this._cache[name] = value;
    }

    if (typeof value === "function") {
      value = value.call(this.view);
    }

    return value;
  };
于 2012-12-27T11:34:54.770 に答える