微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – knockoutjs afterRender函数在foreach绑定

我试图通过使用knockoutjs foreach绑定来指定插入元素的入口效果.很简单的设置:
myviewmodel.myObservableArray.push({enter:function() { ... });

标记中:

foreach:{data:myObservableArray,afterRender:enter}

似乎应该工作吗?对吗?但是它没有在项目上找到enter函数.我所发现的工作是:

myviewmodel.enter = function(something,item) { item.enter(); };

foreach:{data:myObservableArray,afterRender:$root.enter}

向根视图模型添加enter函数,并将afterRender绑定到$root.enter.然后将Enter作为其第二个参数传递,这样可以依次调用该项的输入函数,但感觉就像一个黑客.

任何人都可以解释这里发生了什么吗?

谢谢.

编辑:

澄清我创造了一个fiddle.

这样做非常简单,并在animated transitions example中进行了更深入的讨论.它在根视图模型中运行一个使用foreach绑定插入的每个dom元素的函数.

所以问题是:如果我想要项目特定afterRender,afteradd或beforeRemove函数?我可以看到这是有用的.特别是如果使用模板绑定动态选择一个模板(note 4).有没有干净的方法呢?现在我在视图模型的根目录中有一个enter函数,它只是简单地在项目上调用enter函数,但是像上面所说的那样,这感觉就像是一个黑客.

解决方法

不,这是 it was designed的方式.

Documenation

Note 3: Using “afterRender”,“afteradd”,and “beforeRemove”

Sometimes you might want to run custom post-processing logic on the DOM elements generated by your templates. For example,if you’re using a JavaScript widgets library such as jQuery UI,you might want to intercept your templates’ output so that you can run jQuery UI commands on it to transform some of the rendered elements into date pickers,sliders,or anything else.

Generally,the best way to perform such post-processing on DOM elements is to write a 07002,but if you really just want to access the raw DOM elements emitted by a template,you can use afterRender.

Pass a function reference (either a function literal,or give the name of a function on your view model),and Knockout will invoke it immediately after rendering or re-rendering your template.

(重点是我)

正如它所说,自定义绑定是另一种方法,可能会更好地根据输入()函数做什么.

原文地址:https://www.jb51.cc/js/153321.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐