Javascript Ractive.js中的onrender vs init

Javascript Ractive.js中的onrender vs init,javascript,ractivejs,Javascript,Ractivejs,我最近开始尝试。我对它的组件特别感兴趣。我立即注意到的一点是,许多示例都使用了init选项。但是,当我尝试在代码中使用init时,我收到了一个弃用通知,然后它建议使用onrenderonrender的示例比init少得多,而且this.find等一些函数在onrender中不可用。我查看了Github的问题,但找不到这一更改背后的任何理由,也找不到选择特定于组件的元素的建议路径 我创建了一个函数来尝试用新的API创建递归组件,但我不得不使用jQuery和一个未记录的片段API来选择我需要操作的特

我最近开始尝试。我对它的组件特别感兴趣。我立即注意到的一点是,许多示例都使用了
init
选项。但是,当我尝试在代码中使用
init
时,我收到了一个弃用通知,然后它建议使用
onrender
<但是,code>onrender的示例比
init
少得多,而且
this.find
等一些函数在
onrender
中不可用。我查看了Github的问题,但找不到这一更改背后的任何理由,也找不到选择特定于组件的元素的建议路径

我创建了一个函数来尝试用新的API创建递归组件,但我不得不使用jQuery和一个未记录的
片段
API来选择我需要操作的特定DOM节点。我觉得这与Ractive期望您做的事情背道而驰,但我无法理解现有文档对我的期望


init
onrender
选项之间的主要区别是什么,以及
onrender
希望您如何处理组件中的特定元素及其事件?

您可以在
onrender
中使用
this.find()
(如果出于某种原因无法处理,您已经发现了一个bug!)

我们将
init
分为
oninit
onrender
两部分,原因有很多。你提到的那些例子已经过时了——它们是否在ractivejs.org上?如果是这样,我们应该解决它们。您可以找到有关生命周期事件的更多信息,但基本区别在于:

  • 在初始渲染时调用了
    init
    (假设组件已渲染,即如果您正在进行服务器端渲染,则从不在node.js中渲染)
  • oninit
    在创建时调用,在渲染之前立即调用。对于任何抽象实例,无论是否渲染,都只调用一次。因此,它是设置事件处理程序等的好地方。
    oninit
    的反面是
    onteardown
    ,因此,如果需要,您可以使用该处理程序进行任何清理(或者使用
    this.on('teardown')
    内部
    oninit
  • 每当渲染组件时,都会调用onrender
。这种情况可能会发生多次(如果未渲染,然后重新渲染,等等),或者根本不会发生。如果需要存储DOM引用等,这里就是最佳位置。
onrender
的反面是
onnrender

我做了一个测试,用更惯用的代码替换了jQuery内容,以展示如何在不存储DOM引用的情况下进行操作。

Hmm,这一点你是对的。查找
我试图重现我遇到的问题,但我似乎无法重现。我想当我遇到这个问题时,我使用的是最新版本。
cdn.ractivejs.org/latest
是否指向0.7.2或更为最新的版本?如果它是一个更新的版本,它可能已经被修复了(如果有问题的话)。谢谢你的叉子。这非常有帮助。我将浏览文档并创建一个示例列表,这些示例是我在github发行版中看到的使用旧的
init
api的示例。没有问题!最新版本为0.7.2-您始终可以在注释块中的.js文件顶部看到版本,或者通过记录
Ractive来查看版本。版本
FYI:
oninit
的行为与说明不同: