2014-03-26 33 views
0

我想为端口domjs浏览器。Javascript - 如何更改没有'this'的范围和访问方法

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

但我不知道如何将'header''h1''h2'这些方法附加到'mytemplate'。

如何使用不带'this'关键字的header()。


失败案例:

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

我不能用头(),模板。 (在这种情况下, 'this.header' 可用)


回答

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

btw。在任何时候都可以访问domjs.mapdomjs.map.headerdomjs.map.h1等利用全球范围内的

方法,是有争议的所有功能,有它的不足之处(如功能都没有经过函数返回可用),并在domjs这个即将到来的版本方法将不再使用。作为替代方案Webmake(可能还有Browserify)插件将被提供,所以domjs模板可以与在本地范围内保证的那些函数捆绑在一起,然后事情就会自然地工作。

相关问题