knockout.js 带有侧页的挖空导致不能对同一元素多次应用绑定

oknwwptz  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(148)

我正在使用knockoutJs构建一个SPA。我面临的问题是,我有一个带有几个锚链接的侧栏页面,这些链接将按照下面的代码片段加载不同的页面

$('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。

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

我的Js文件如下:

var ApplicationForm = function () {
/* add members here */
/* the model */
var app = {
    nid: ko.observable(),
    lastName: "",
    firstName: "",
    address: "",
};

var addEmployment = function() {
};

var removeEmployment = function(params) {
};

var init = function () {
    /* add code to initialise this module */
    ko.applyBindings(ApplicationForm);
};

/* form submission */
var submit = function () {
    console.log(ko.toJSON(app ));
};

/**
 * subscribe to checkbox isdead and if false, clear the values
 */
app.isDead.subscribe(function(newValue) {
    //when false, clear all values
     if (!newValue) {
          //
     }
});

/* execute the init function when the DOM is ready */
$(init);

return {
    /* add members that will be exposed publicly */
    submit: submit,
    application: app,
    add: addEmployment,
    remove: removeEmployment
};

}();
一些细节被省略了。问题是每次我点击一个侧链接页面,它会加载相应的和JS,以及它给出错误你不能多次应用绑定到同一个元素因为我调用applyBindings多次。
有人能建议我如何设计我的网页,使我不得到这个错误吗?
谢谢你,谢谢你

at0kjp5o

at0kjp5o1#

由于每次都要重用同一个元素,因此在应用新的绑定之前,需要清除以前的绑定。
它可能工作,把它放在顶部的开关功能,这样,但我不能告诉肯定的基础上,可用的代码张贴。

$('div#list a').click(function(){
    ko.cleanNode($('#container')[0]);
    ...

您可能还需要将applyBindings更改为仅针对同一个元素,具体取决于您在该元素之外的其他地方使用绑定。

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

相关问题