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.

(重点是我)

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...