【问题标题】:KnockoutJS bind event after template render模板渲染后的 KnockoutJS 绑定事件
【发布时间】:2012-03-07 13:11:51
【问题描述】:

我已经搜索了一段时间,我非常有信心这是一个新问题,而不是像标题所暗示的那样重复。 :)

基本上,我试图找出 KnockoutJS 在使用 jQuery 模板之类的模板渲染后创建的可订阅事件。

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

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

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

【问题讨论】:

    标签: javascript jquery templates knockout.js knockout-templating


    【解决方案1】:

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

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

    真正有效的是废弃整个“foreach”绑定并像这样使用 Knockout 的本机“数据”绑定:

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

    那么“afterRender”就如其名称所暗示的那样工作。

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

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

    感谢丹的帮助!!

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • beforeRemove 实际上并没有覆盖它,因为它在模板渲染之前触发。我需要准确把握模板完成的那一刻。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多