javascript – knockoutjs afterRender函数在foreach绑定

前端之家收集整理的这篇文章主要介绍了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.

(重点是我)

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

猜你在找的JavaScript相关文章