如何在 riotjs 中使用 each={} 正确引用 'nested' 标签
How to correctly reference 'nested' tag with each={} in riotjs
我正在尝试使用加载标签的概念,我可以包装其他元素以在异步检索数据时提供一致的加载显示。考虑以下代码:
This example relies on browserify
(require) but shouldn't make a difference to
the question
<test>
<loading>
<ul>
1. = <li each={ items }>{ title }</li>
or
2. = <li each={ parent.items }>{ title }</li>
or
3. = <li each={ opt.data.items }>{ title }</li>
</ul>
</loading>
<script>
require('riot');
require('./loading.tag');
this.items = [
{ title: 'title 1'},
{ title: 'title 2'}
];
this.on('mount', function () {
riot.mount('loading', /* for 3 = */ {data: this.items});
})
</script>
</test>
如您所见,标签是 <test />
并包含一个嵌套标签 <loading />
,它包裹 <test />
显示的内容。问题是我不确定引用项目数组的正确方法(在现实世界中会通过 ajax 引入)。我尝试了选项 1 和 2,但没有任何显示。 3 有效(将数据作为选项传递)但感觉不对。
它可能与 <yield />
有关,这就是 <loading />
显示其内容的方式,但我不知道为什么。
<loading>
<div><yield /></div>
</loading>
当我尝试你上面的代码 2 时得到了正确的结果。您的上述代码存在一些问题,可能会导致您出现问题。
1) 我从来没有在标签内部使用过 require。我怀疑它在需要标记文件时是否有效。 .tag 扩展名什么都不做。 type="riot/tag"
表示脚本标签不是 javascript 而是 riot 可以使用的特殊脚本。
2) 您关闭了标签 </about>
而不是 </test>
。我认为您的 riot tag 在这种情况下无法编译。
3) 我不知道你使用的是哪个版本的 riot,但在 2.3.12 中,如果你安装测试标签,那么任何 children(在这种情况下你的 "loadings")如果您已经加载了 .tag 文件,它将自动挂载。我认为问题是你在你的 "loading" 标签上调用 mount 两次,这可能会使它们与它们的 parent.
分离
我认为您的问题是 <loading>
标记在挂载 <test>
时没有任何意义。然后你需要 loading.tag,然后允许装载。在安装测试之前尝试要求 <loading>
。我做了一个 js fiddle 我会怎么做。希望这能回答您的问题。
我正在尝试使用加载标签的概念,我可以包装其他元素以在异步检索数据时提供一致的加载显示。考虑以下代码:
This example relies on
browserify
(require) but shouldn't make a difference to the question
<test>
<loading>
<ul>
1. = <li each={ items }>{ title }</li>
or
2. = <li each={ parent.items }>{ title }</li>
or
3. = <li each={ opt.data.items }>{ title }</li>
</ul>
</loading>
<script>
require('riot');
require('./loading.tag');
this.items = [
{ title: 'title 1'},
{ title: 'title 2'}
];
this.on('mount', function () {
riot.mount('loading', /* for 3 = */ {data: this.items});
})
</script>
</test>
如您所见,标签是 <test />
并包含一个嵌套标签 <loading />
,它包裹 <test />
显示的内容。问题是我不确定引用项目数组的正确方法(在现实世界中会通过 ajax 引入)。我尝试了选项 1 和 2,但没有任何显示。 3 有效(将数据作为选项传递)但感觉不对。
它可能与 <yield />
有关,这就是 <loading />
显示其内容的方式,但我不知道为什么。
<loading>
<div><yield /></div>
</loading>
当我尝试你上面的代码 2 时得到了正确的结果。您的上述代码存在一些问题,可能会导致您出现问题。
1) 我从来没有在标签内部使用过 require。我怀疑它在需要标记文件时是否有效。 .tag 扩展名什么都不做。 type="riot/tag"
表示脚本标签不是 javascript 而是 riot 可以使用的特殊脚本。
2) 您关闭了标签 </about>
而不是 </test>
。我认为您的 riot tag 在这种情况下无法编译。
3) 我不知道你使用的是哪个版本的 riot,但在 2.3.12 中,如果你安装测试标签,那么任何 children(在这种情况下你的 "loadings")如果您已经加载了 .tag 文件,它将自动挂载。我认为问题是你在你的 "loading" 标签上调用 mount 两次,这可能会使它们与它们的 parent.
分离我认为您的问题是 <loading>
标记在挂载 <test>
时没有任何意义。然后你需要 loading.tag,然后允许装载。在安装测试之前尝试要求 <loading>
。我做了一个 js fiddle 我会怎么做。希望这能回答您的问题。