递归组件包含

Recursive component inclusion

我正在查看 Rich-Harris 关于 github 的 Authoring Ractive.js components 文档。

首先调用 foo 组件并以这种方式包含它:

<link rel='ractive' href='foo.html' name='foo'>
<p>This is an imported 'foo' component: <foo/></p>

我的理解是将 foo.html 声明为组件并在 foo 标记上调用它,这不需要执行 ractive.load (尽管我还不明白数据加载的位置发生)。

因为它根本不起作用(没有加载组件),我想知道我是否误解了这部分。

有没有人用过这个并能给我一个完整的例子?

组件本身独立于加载机制。

在最简单的形式中,组件可以声明在javascript:

Ractive.components.foo = Ractive.extend({
    template: '#foo' // id of script tag, or can be inline string,
    // other options
});

var ractive = new Ractive({
    template: '<p>This is an main view with a 'foo' component: <foo/></p>'
});

创建组件在文档中进行了介绍here

打包加载组件的方式有很多种。在您的示例中,使用 link 标记需要使用 ractive-load 来实际加载组件:

<!-- name is optional if same as file name -->
<link rel='ractive' href='foo.html' name='foo'> 

<script src='ractive.js'></script>
<script src='ractive-load.js'></script>

<script>

// calling load() with no parameters loads all link tags and 
// registers them as global components
Ractive.load().then( function () {

  var ractive = new Ractive({
    el: 'body',
    template: 'I have access to the <foo/> component!',
    data: { ... }
  });

  // or you could instantiate a component via:
  var app = new Ractive.components.app({
      ... /options
  });
}).catch( handleError );

</script>