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
的行为与说明不同: