2014-03-26 46 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模板可以與在本地範圍內保證的那些函數捆綁在一起,然後事情就會自然地工作。

相關問題