【问题标题】:Knockout: afterRender not being called in a foreach template binding淘汰赛:在 foreach 模板绑定中未调用 afterRender
【发布时间】:2014-07-09 16:01:22
【问题描述】:

我正在尝试使用 Knockout 的 afterRender 绑定,但我引用的函数从未被调用。

我有嵌套的视图模型: vmConcepts 和 vmConcept,其中 vmConcepts.Concepts = vmConcept 对象数组。

vmConcept(内部模型)有一个函数self.Rendered = function (elmnt) {...

我将 vmConcepts(外部模型)绑定到以下标记(您可以看到这调用了嵌套模板):

<ul>
    <!-- ko template: { name: 'concept-template', foreach: { data: Concepts, afterRender: Rendered } } --><!-- /ko -->
</ul>

我的理解是,应该为传递给concept-template 模板的每个 vmConcept 对象(在 vmConcepts.Concepts 中)调用此 afterRender 绑定,但这不会发生。我什至在vmConcepts 中添加了相同的Rendered 函数,但也没有受到影响。

我已将其作为data-bind 绑定和虚拟绑定进行了尝试。

我错过了什么?

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    你的绑定搞砸了。 foreach 内部模板与 foreach 绑定不同。在模板上渲染的 after 将在每个孩子之后触发。

    试试这个

    <ul>
        <!-- ko template: { 
            name: 'concept-template', 
            foreach: Concepts, 
            afterRender: Rendered 
        } --><!-- /ko -->
    </ul>
    

    我在这里有一个工作示例: http://jsfiddle.net/4t94G/1/

    【讨论】:

    • 啊哈!我确实以前有这种语法,但是当我阅读这篇文章时改变了它:stackoverflow.com/questions/16045740/…,尽管正如你所指出的,template 绑定有一个不同的foreach。我还遇到了引用函数所在的视图模型的问题,因为我有一个更高级别的视图模型,它也有一个名为Concepts 的属性,这是 afterRender 函数应该位于的视图模型。无论如何,鉴于我的问题,你的回答在技术上是正确的,所以你得到了分数。
    • 这没有回答你的问题吗?你能解决你的问题吗?
    • 是的,我能够解决我的问题,但事实证明问题不在我的绑定属性中,这是由于afterRender 函数。
    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多