我正在尝试使用Sammy.js创建单页应用程序。 This是JS:
var galleryTemplateUrl = "templates/galleryTemplate.html";
var registerTemplateUrl = "templates/registerTemplate.html";
var containerId = '#container';
var containerElement = $(containerId);
var app = new Sammy(containerId, function() {
var self = this;
self.get('#/Gallery', function() {
containerElement.html("");
$.ajax({
method: "POST",
url: galleryTemplateUrl
}).done(function (result) {
containerElement.append(result);
ko.applyBindings(testView(),containerElement[0]);
})
});
self.get('#/Register', function(){
containerElement.html("");
$.ajax({
method: "POST",
url: registerTemplateUrl
}).done(function (result) {
containerElement.append(result);
})
});
});
app.run('#/Gallery');
其余的非常简单。我的HTML中有一个容器div,模板是HTML文件,其中包含一些数据绑定。
问题:启动应用程序后,第一次加载时会成功读取绑定,但如果我更改为下一个路径并返回上一个路径,则绑定不再适用。
我想我应该重置ko.applyBinding中的函数,但我不知道怎么做。
我在尝试新的AJAX请求之前尝试添加ko.clearNode(),但这并没有效果。
有什么想法吗?
编辑:我找到了解决问题的办法,但可能不是"对"解。基本上我把我的容器div放在另一个div中。然后每次我将一个模板添加到我的容器div中时,我将其删除并使用不同的id重新创建它。
编辑:问题的根源似乎是如果在传递给新Sammy的同一元素上使用了cleanNode(),那么cleanNode也将关闭Sammy。基本上没有&#39 ;在Sammy运行的元素上使用cleanNode。
答案 0 :(得分:0)
我建议您使用Knockout来管理DOM。这可能意味着为每个路由页面制作一个component(或者只是template),并让路由器激活相应的路由页。
This answer可能会有所帮助。