6

我在 riot js 方面没有太多经验。我创建的标签层次结构就像

<tag-1>
    <tag-2>
        <tag-3>
        </tag-3>
    </tag-2>
</tag-1>

现在我需要将变量(其中包含 JSON)传递给“tag-3”,并且在每次更新该变量时,我如何更新“tag-3”。现在我正在安装“tag-3”,比如

riot.mount('tag-3', { comm: "Hello" });

其中“comm”是变量,并且在标签“tag-3”中无法访问挂载变量“comm”后,它显示未定义。另一件事,每个标签 html 都在一个单独的“.tag”中,并且使用该标签我正在调用其他标签,例如在“tag-1.tag”文件中调用“tag-2”和在“tag-2.tag”中文件我调用“tag-3”,在“tag-2.tag”文件中我正在安装“tag-3”

我怎样才能做到这一点 ?

4

2 回答 2

5
  1. 您不需要在其他 riot 标签内安装标签 - 只需要安装根标签。这就是为什么你的comm参数没有进入tag-3.

  2. 您可以在一个 .tag 文件中包含多个标签定义。编译标签文件后,里面的 riot 标签是不是从多个标签文件中加载的都没有关系。

  3. 您可以将变量作为标签属性传递 - 它们将在opts变量下可用。

综上所述,您的单个标记文件可能如下所示:

<tag-1>
  <p>This is my TAG1</p>
  <tag-2 comm="{ commValue}"></tag-2>

  <script>
    this.commValue = { text: 'My text' }
  </script>
</tag-1>

<tag-2>
  <p>This is my TAG2 with comm: { opts.comm.text }</p>

  <script>
    this.on('update', function () {
      // you can use 'opts.comm' here
    });

  </script>
</tag-2>
于 2015-08-29T08:08:03.043 回答
1

听起来comm的价值会随着时间的推移而不断变化。如果这是真的,那么最好的选择是 riot.observable() 机制,用于在现有标签之间发送消息。

  1. 导致值更改的任何标签都会“触发”您选择的消息 - 可能是“value_changed”。

    riot.observable().trigger('value_changed', {comm: newValueOfComm})

  2. 您的 tag-3 将“监听”消息 'value_changed' 并根据它做一些事情。

    riot.observable().on('value_changed', function(data) { console.log("new value=" + data.comm); })

有关工作示例,请查看“机制 2”:http: //vinapps.com/riot-cookbook-app/#/pages/between-page

参考页面在这里: http ://riotjs.com/api/observable/

于 2016-03-02T21:48:41.990 回答