17

我一直在寻找一段时间,我非常有信心这是一个新问题,而不是像标题所暗示的那样重复。:)

基本上,我试图找出在使用 jQuery 模板之类的东西时,KnockoutJS 在模板渲染之后是否创建了一个可订阅的事件。

我会使用内置的“afterRender”,但我发现如果可观察数组被清除,它不会触发。我构建了这个演示来说明这个问题:http: //jsfiddle.net/farina/YWfV8/1/

另外,我知道我可以编写一个自定义处理程序......但这对于我需要的东西来说似乎真的没有必要。

我只想要一个在模板完成渲染后触发的事件。

4

2 回答 2

29

我的同事昨晚实际上用我回家前正在玩的东西解决了这个问题。

因此,事件“afterRender”、“afterAdd”和“beforeRemove”的整个“问题”是它们与“foreach”绑定结合起来的行为不同。KnockoutJS 很高兴在他们的页面上告诉你这一点,但无论出于何种原因,直到我在实践中看到它,它才真正为我所接受。

真正有效的是废弃整个“foreach”绑定并使用 Knockout 的本机“数据”绑定,如下所示:

data-bind="template: { name: 'item-template', data: items, afterRender: caller }"

然后“afterRender”正如其名称所暗示的那样工作。

我的印象是,如果没有 foreach,您将无法迭代集合并呈现新的 UI,但这些示例说明它确实有效。

我为这两种 ViewModel 样式做了一个示例,因为我有时需要其中一种。

感谢丹的帮助!!

于 2012-02-16T18:24:47.753 回答
-1

beforeRemove你要找的吗?我不确定你想要实现什么行为。请查看此示例: http: //jsfiddle.net/romanych/YWfV8/8/ 这是您想要的吗?

于 2012-02-16T10:33:51.057 回答