绑定仅在浏览器刷新后有效

时间:2014-07-22 22:37:17

标签: knockout.js

我有一个自定义绑定,是在How to refresh Footable that is bound with Knockout?的帮助下创建的。

我有一个页面,首次加载页面时不会调用绑定,但是如果我刷新页面则会调用它。 (按F5)对于我拥有的所有其他页面,绑定工作按预期进行,并且我从未在其他任何地方看到此行为。

到目前为止我已经注意到了:

  • 据我所知,视图模型中的数据相同
  • 当我在绑定源代码的init函数中放置一个断点时,断点将在它工作的时间点击。当它不起作用时,断点永远不会被击中。我真的需要调用预处理,但我一直把断点放在init中,因为它位于文件的顶部。如果我将断点放在预处理函数中,我会得到相同的结果。
  • 当我在init函数的外部和上方放置一个断点时,每次都会触发断点。表示已创建绑定
  • 这是针对一个表,当我在表格上方放置一个跨度并使用toJSON()显示$ data时,数据在工作与否时看起来是一样的。

我试图创建一个Plunk来证明这一点,但我没有运气。 (意思是,每当我尝试简化场景时,它总是有效)

这里是html的样子:(数据绑定在两种情况下看起来都一样)

<tbody data-bind="footable: items">
    <tr class="footable-even" style="display: table-row;">
        <td class="footable-visible footable-first-column"><span class="footable-toggle"></span></td>
        <td class="footable-visible"></td>
        <td class="footable-visible"></td>
        <td class="footable-visible footable-last-column"></td>    
    </tr>
</tbody>

我正在使用只有一行的结果集进行测试。

那么,什么会导致绑定不被调用?我还能在哪里找点断点来看看发生了什么?

1 个答案:

答案 0 :(得分:0)

在knockout-3.1.0.debug.js中,我能够追踪到这段代码:(第2455行)

ko['getBindingHandler'] = function(bindingKey) {
    return ko.bindingHandlers[bindingKey];
};

在页面不起作用的时候,尚未加载自定义绑定,因此该函数返回undefined。 (因为它应该)所以问题不在于淘汰赛,而在于执行的顺序。

现在要弄清楚为什么加载这个自定义绑定的时间对于这一页不同而不是其他任何一个......