2014-09-04 54 views
0

我有这样的代码:阿贾克斯+淘汰赛stopBinding标签问题

第1页:

<html> 
<head></head> 
<body> 
    <a href="javascript:loadPage()">Test</a> 
    <div id="content"></div> 
</body> 
</html> 

第2页:

<!-- ko stopBinding: true --> 
<div id="testView_content"> 
    <span data-bind="text: mae"></span> 
</div> 
<!-- /ko --> 

相关JS:

var lou; 

function loadPage() { 
    $('#content').html(""); 
    $.ajax({ 
     url: "./page/page2.html" 
     cache: false, 
     dataType: "html", 
     success: function(data) { 
     fillPage(); 
     } 
    }); 

} 

function fillPage() { 
    $('#content').html(data); 
    $('#content').show("slow"); 


    if (!lou) { 
     lou = new Lou(); 
     ko.applyBindings(lou, document.getElementById('testView_content')); 
    } 
} 

KO型号:

var Lou = function() { 

this.mae = ko.observable("test"); 

}; 

嗯,它的工作原理是第一次,但如果我再次运行该函数,html将呈现为空(但敲除模型视图isnt,我检查)。任何人有任何想法?也许我做错了使用ajax + stopBinding,也许我的负载设计?我尝试使用stopBinding标签内内容DIV(第1页),而不是创建一个新的第2页,但没有成功=(

我真的新的淘汰赛,所以任何帮助将是惊人的。

谢谢!

+0

我还没有看过ko,但它让我感到你没有将'data'变量传递给fillPage(),所以在fillPage()的第1行中,'data'将等于'undefined' - 除非你省略了一些相关的东西。 – 2014-09-04 04:46:09

回答

0

我想可能是问题是当你第二次执行该方法时,通过ajax加载的数据没有绑定到模型,因为现在定义的变量'lou'不会进入如果你在那里打电话给ko.applyBindings。

我建议把call ko.applyBindings移出来,然后在if块。

function fillPage() { 
    $('#content').html(data); 
    $('#content').show("slow"); 

    if (!lou) { 
     lou = new Lou(); 
    } 

    ko.applyBindings(lou, 
     document.getElementById('testView_content')); 
}