Javascript - 如果没有'这个'我如何更改范围和访问方法?

时间:2014-03-26 07:09:33

标签: javascript dom scope dom-manipulation

我想将domjs移植到浏览器中。

var mytemplate = function () {
  header(
    h1('Heading'),
    h2('Subheading'));

  nav(
    ul({ 'class': 'breadcrumbs' },
      li(a({ href: '/' }, 'Home')),
      li(a({ href: '/section/'}, 'Section')),
      li(a('Subject'))));

  article(
    p('Lorem ipsum...'));

  footer('Footer stuff');
};

但我不知道如何附加一些方法,如标题' ' H1' ' H 2'到了' mytemplate'。

如何在没有'这个'的情况下使用header()关键字。


案例失败:

   template.apply($funcs),
   template.bind($funcs)(),
   template.call($funcs),

我无法在模板中使用header()。 (在这种情况下,' this.header'可用)


1 个答案:

答案 0 :(得分:1)

首先,您应该查看documentation

var domjs = require('domjs/lib/html5')(document);
// Execute mytemplate with h1, h2 etc. functions attached
var mydom = domjs.build(mytemplate);
console.log(mydom.firstChild.nodeName); // header

如果你问的是它是如何工作的(?),因为你有一些自定义处理 - 它通过污染调用函数的全局范围来工作。你可以在这里看到它是如何完成的 - > https://github.com/medikoo/domjs/blob/v0.2.3/lib/dscope.js#L32-L36

顺便说一句。您始终可以domjs.map domjs.map.headerdomjs.map.h1等访问{{1}}上的所有这些功能。

使用全局范围的方法是有争议的并且有它的缺点(例如函数返回后函数不可用),并且在即将发布的domjs版本中将不再使用此方法。作为替代Webmake(可能还有Browserify)插件,所以domjs模板可以与本地范围内保证的那些函数捆绑在一起,然后事情会以自然的方式工作。