2014-09-04 85 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')); 
}