Sammy.js:部分调用/渲染我的HTML两次

时间:2016-02-24 13:44:58

标签: html knockout.js sammy.js

我是淘汰赛和淘汰赛的新手。我正在使用Sammy(路由器)和KnockOut(绑定)实现SPA。

我的代码如下。

this.get('#/Page/:operation', function (context) {
            this.partial('templates/Page1.html', { cache: false }).then(function (content) {
                // the first argument to then is the content of the
                // prev operation
                $('#sammyDiv').html(content);
            });
        });

当我检查控制台时,它说“你不能多次将绑定应用于同一个元素。(...)”

我在这里做错了吗?

Partial和Render有什么区别?

2 个答案:

答案 0 :(得分:0)

我猜测你正在向已被绑定的父级注入新的html。你应该更具体地说明你绑定哪些div。 I.E将绑定应用于您注入的html的父div,或者清理并重新应用绑定。我在整个申请过程中使用了这两种方法。

if (isBound("my-div"))
    ko.cleanNode(document.getElementById('my-div'));
ko.applyBindings(myModel, document.getElementById('my-div'));

助手功能:

// Checks if Element has Already been Bound (Stops Errors Occuring if already bound as element can't be bound multiple times)
var isBound = function (id) {
    if (document.getElementById(id) != null)
        return !!ko.dataFor(document.getElementById(id));
    else
        return false;
};

我在所有绑定之前使用此检查作为安全网。

答案 1 :(得分:0)

感谢您的回复和评论。问题出在Sammy路由器上。

SELECT p1.* , p1.a_id as a_id
            FROM tbl_name p1
            INNER JOIN
            (
                SELECT max(a_id) as MaxVal
                FROM tbl_name
                GROUP BY a_id
            ) p2
              ON p1.id = p2.id
              AND p1.a_id = p2.MaxVal
            WHERE p1.datetime >= DATE_SUB(NOW(),INTERVAL 0.5 HOUR)

更改为

this.get('#/Page/:operation', function (context) {
            this.partial('templates/Page1.html', { cache: false }).then(function (content) {
                // the first argument to then is the content of the
                // prev operation
                $('#sammyDiv').html(content);
            });
        });

它工作得非常好。再次感谢。