使用KnockoutJS 2.2.0& jQuery 1.8.2删除#someDiv所有子节点的所有绑定

时间:2012-12-10 09:59:30

标签: jquery knockout.js

我想从某个div的所有子元素中删除所有绑定(ko.cleanNode)。 必须是一个noobie问题,但我无法弄清楚如何使用jQuery循环遍历所有childre,grand-children,曾祖母等,同时让KnockoutJS删除所有DOM元素的绑定。

我不想从DOM中删除元素。这是一个单页面应用程序,因此元素作为嵌入资源预先加载,如果再次访问页面,则不会重新发送给客户端。如果客户端重新访问该应用程序的那部分,我将有一个函数重新绑定必要的元素,这些元素目前工作正常。

当前设置:

<html>
<head>
//loading all resources
</head>
<body>
//load first element using some obscure setup
<div id="firsPage" data-role="page">
    <div data-role="header">@Global.header</div>
    <div data-role="fieldcontain">
         <label for="firstInput" />
         <input id="firstInput some other stuff />
    </div>
    <div data-role="datebox <!-- some settings --> >
         //creates table using jQuery mobile (lots of (great-)(grand-)children)
    </div>
    <div data-role="fieldcontain">
        <div id="secondInput">
            <div class="checklist">
                <ul>
                    <li />
                    <li />
                </ul>
            </div>
        </div>
    </div>
</div>
//Here the whole thing starts again 
<div id="secondPage" data-role="page">
    <!-- repeat above innerHTML in your mind ;) -->
</div>
//And here again! and again...
</body>

我遇到的问题是当我使用

时,孩子的绑定似乎没有“清理”
ko.cleanNode($('#firstPage')[0]);

或者当我将Element放入变量然后将其格式化为ko.cleanNode($ element)时。

有办法做到这一点吗?现在已经盯着它看了好几个小时,所以可能会忽略一种太明显的方式......

谢谢!

编辑:以下是我得到的错误: 未捕获错误:无法解析绑定。 消息:ReferenceError:未定义someDate; Bindings Value:value:someDate

然而,这个ko.observable“someDate”不再作为我正在导航到的“data-role ='page'”的绑定存在。由于某种原因,它仍然希望绑定此值。如果我使用removeNode()我没有这样的问题,那么我有一个问题,我错过了一个包含整个页面的DOM元素。

1 个答案:

答案 0 :(得分:0)

你试过吗?:

$('#firstPage').undatabind();

<强>更新

很抱歉,这个方法是我使用的Knockout Programmatic插件的一部分,正如@NukeFace指出的那样。

干杯。