当使用knockout.js和Sammy.js时,如何设置内容来自模板的可观察路径

时间:2016-02-16 17:00:20

标签: javascript knockout.js routing sammy.js

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

我建议您使用Knockout来管理DOM。这可能意味着为每个路由页面制作一个component(或者只是template),并让路由器激活相应的路由页。

This answer可能会有所帮助。