我是淘汰赛和淘汰赛的新手。我正在使用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有什么区别?
答案 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);
});
});
它工作得非常好。再次感谢。