Javascript 带有侧页的敲除导致无法对同一元素多次应用绑定

Javascript 带有侧页的敲除导致无法对同一元素多次应用绑定,javascript,knockout.js,single-page-application,knockout-3.0,Javascript,Knockout.js,Single Page Application,Knockout 3.0,我正在用knockoutJs建造一个水疗中心。我面临的问题是,我有一个带有多个锚链接的侧栏页面,它将按照下面的代码片段加载不同的页面 $('div#list a').click(function(){ var page = $(this).attr('href'); if (page == "new") { $('#container').load('application/application.jsp', function(data){

我正在用knockoutJs建造一个水疗中心。我面临的问题是,我有一个带有多个锚链接的侧栏页面,它将按照下面的代码片段加载不同的页面

 $('div#list a').click(function(){
    var page = $(this).attr('href');
    if (page == "new") {
        $('#container').load('application/application.jsp', function(data){
            //return false;
        });
        return false;
    } else if (page == "dashboard") {
        $('#container').load('dashboard/dashboard.jsp', function(data){
            //return false;
        });
        return false;
    }
 });
对于每个页面,我都加载相应的html和js。例如,在上面的示例中,页面是新的,html如下所示

<form>......fields are there</form><script src="application/application.js"></script>
}()

省略了一些细节。问题是,每次我点击一个侧链接页面,它都会加载相应的和JS,并给出错误,因为我多次调用applyBindings,所以不能对同一个元素多次应用绑定

有人可以建议我如何设计我的网页,使我不会得到这个错误


非常感谢。

因为您每次都在重复使用相同的元素,所以在应用新的绑定之前,您需要清除以前的绑定。这可以通过
ko.cleanNode(元素)实现

这样把它放在切换函数的顶部可能会有用,但根据发布的可用代码,我不能确定

$('div#list a').click(function(){
    ko.cleanNode($('#container')[0]);
    ...
您可能还需要将applyBindings更改为仅针对同一元素,具体取决于您在该元素之外使用绑定的其他位置

ko.applyBindings(ApplicationForm, $('#container')[0]);

由于每次都要重用相同的元素,因此在应用新绑定之前,需要清除以前的绑定。这可以通过
ko.cleanNode(元素)实现

这样把它放在切换函数的顶部可能会有用,但根据发布的可用代码,我不能确定

$('div#list a').click(function(){
    ko.cleanNode($('#container')[0]);
    ...
您可能还需要将applyBindings更改为仅针对同一元素,具体取决于您在该元素之外使用绑定的其他位置

ko.applyBindings(ApplicationForm, $('#container')[0]);

我无法从您的代码中判断第二次调用applyBindings的位置。是不是每个页面在加载后都会在其init函数中调用它,所以第二次单击链接是在出现错误时?@JasonSpake是的,我无法从代码中分辨第二次调用applyBindings的位置。是不是每个页面在加载后都会在其init函数中调用它,所以第二次单击链接是在出现错误时?@JasonSpake yesexactly@ashley它以什么方式不起作用?可能只需要一点点tweaking@ashley是否尝试将applyBindings更改为仅应用于容器元素<代码>ko.applyBindings(ApplicationForm,$('#container')[0])哇。这很管用。我只是在做ko.applyBindings(ApplicationForm)。我所做的是正确的还是有更好的方法来构造html和js文件?谢谢lot@ashley您之前所做的是全局应用绑定,如果您在容器元素之外有其他绑定,这可能正是您想要的。这只取决于其余代码的工作方式。另一种方法可能是全局应用绑定一次,并使用可观察对象来交换容器的内容,例如使用模板绑定,但您拥有的是fine@ashley它以什么方式不起作用?可能只需要一点点tweaking@ashley是否尝试将applyBindings更改为仅应用于容器元素<代码>ko.applyBindings(ApplicationForm,$('#container')[0])哇。这很管用。我只是在做ko.applyBindings(ApplicationForm)。我所做的是正确的还是有更好的方法来构造html和js文件?谢谢lot@ashley您之前所做的是全局应用绑定,如果您在容器元素之外有其他绑定,这可能正是您想要的。这只取决于其余代码的工作方式。另一种方法可能是全局应用绑定一次,并使用可观察对象来交换容器的内容,例如使用模板绑定,但您所拥有的一切都很好