0

我正在使用 knockout.js 为客户创建拖放日记,我刚刚切换到在 chrome 中进行测试,在此我在敲除功能中遇到了这个神秘的错误"Cannot read property 'childNodes' of undefined"parseBindingString但是这个模板已经过测试并在 FireFox/IFE10 中工作.

绑定时抛出错误css: { blackout: workingHours($parent.DaysArray(0), $parents[1].ViewDate()).startTime.getTime() == workingHours($parent.DaysArray(0), $parents[1].ViewDate()).finishTime.getTime() },但是在调试器上下文中,node局部变量按预期具有 4 个已注册的子节点,因此淘汰赛必须尝试在此处进行一些严肃的树导航,这对于我的workingHours()函数或添加blackout类来说根本不是必需的到当前节点。

我认为这仅在 chrome 中出现,因为浏览器之间构建 DOM 的方式存在细微差异,但有人可以就如何解决此类问题提供一些建议吗?或要检查的东西?

<td data-bind="
    css: { 
        blackout: workingHours($parent.DaysArray(0), $parents[1].ViewDate()).startTime.getTime() == workingHours($parent.DaysArray(0), $parents[1].ViewDate()).finishTime.getTime() }">
    <div class="unallocated-booking">
        <div class="status-bar-holder mini-status-bar-holder" data-bind="
            template: { 
                name: 'unallocated-booking-template', 
                foreach: todaysBookings($parent.DaysArray(0), bookings, $parents[1].ViewDate()) }"/>
    </div>
    <div data-bind="
        attr: { 
            'data-init-droppable': false }, 
        class: { 
            droppable: isWorkDay( $parent.DaysArray(0), $parents[1].ViewDate() ) }, 
        template: { 
            name: 'week-cell-template', 
            foreach: todaysBookings($parent.DaysArray(0), bookings, $parents[1].ViewDate()) }"/>
</td>

除了小问题(可能需要一个单独的问题),但具有讽刺意味的是,我只尝试在 chrome 中加载,因为最后一个元素上的attr//绑定似乎忽略了class&绑定,因为我添加了绑定并且我想在 chrome 中进行调试。但是,由于我已经引起了你们所有 knockout.js 爱好者的注意,所以我想我会在这里插入它:p。尽管我看不出我的语法有问题,但甚至可能是相关的。templateclassattrtemplate

4

1 回答 1

1

Knockout.js 不是这个问题的原因

事实证明,Chrome 的工作方式有所不同,getElementsByTagName()因为它不需要(或何时工作)指定搜索元素的命名空间。

于 2013-09-10T09:09:48.063 回答