javascript – 当在当前的一个中找不到时,Mustache js获取父对象的范围

根据胡子RFC

A {{name}} tag in a basic template will try to find the name key in
the current context. If there is no name key,nothing will be
rendered.

因此我期待这样:

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

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

给我一次渲染:

"DEF"

但是,mustache.js会在父级范围内查找值.这给了我

"ABCDEF"

上下文实际上意味着包括所有父母范围吗?

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

解决方法

简短回答:是的.

更长的答案. Context.prototype.lookup执行while循环,在当前上下文中查找标记,并且它是父上下文,同时存在父上下文.

相关的代码

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;
  };

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...