0

我想从某个 div 的所有子元素中删除所有绑定(ko.cleanNode)。一定是一个菜鸟问题,但我不知道如何使用 jQuery 循环遍历所有子项、孙子、曾孙等,同时让 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]);

或者当我将元素放入一个变量中,然后将其格式化为 ko.cleanNode($element)。

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

谢谢!

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

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

4

1 回答 1

0

你有没有尝试过?:

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

更新:

抱歉,正如@NukeFace 所指出的,此方法是我使用的 Knockout Programmatic 插件的一部分。

干杯。

于 2012-12-10T11:02:03.410 回答