2016-03-30 23 views
2

Eminim ki burada bir şeyi yanlış anlamışımdır, ancak benim yaşamım boyunca bunu yapamam.Bir jquery ui iletişim kutusunu doldurmak için Jquery yükünü kullanırken boşaltma bağlantıları

Form açılır penceresi oluşturmak için jquery ui iletişim kutusu kullanıyorum. Formun görünümü ayrı bir dosyadadır, bu yüzden diyaloğu açmak için iletişim kutusunu doldurmak için Jquery.load() kullanıyorum.

Daha sonra nakavt bağlamalarını uygulamak istiyorum.

Sorunumu bazı basit kodlarla yeniden oluşturdum.

Ana html dosyası:

<script src="knockout-3.4.0.js"></script> 
<script src="Jquery/jquery-1.12.2.js"></script> 
<script src="jquery-ui-1.11.4/jquery-ui.js"></script> 

<link rel="stylesheet" type="text/css" href="jquery-ui-1.11.4/jquery-ui.css""> 

<script> 
$(document).ready(function(){ 

//initialise the dialog 
$("#dialog").dialog({ 
    modal: true, 
    autoOpen: false 
}); 


$("#btn").click(function(){ 
    //open the dialog and load the html from the Popup page 
    $("#dialog").load('Popup.html').dialog("open"); 



    //apply a simple binding to the container div in the Popup page 
    ko.applyBindings({someText: "value from knockout"}, $("#container")[0]); 


}); 

}); 
</script> 

<button id="btn">Click</button> 

<div id="dialog" style = "display: none;">the hidden Div</div> 

Popup html dosyası:

<div id="container"> 

<p data-bind="text: someText">Default text in html popup</p> 

</div> 

Ben değiştirin

ko.applyBindings({someText: "value from knockout"}, $("#container")[0]); 

setTimeout(function(){ 
ko.applyBindings({someText: "value from knockout"}, $("#container")[0]); 
},200); 
ile

Ardından dosya çalışır (beklendiği gibi küçük bir gecikmeyle de olsa), ancak bu 'doğru' cevap gibi hissetmez. Bu, applyBindings'in çok hızlı bir şekilde çalıştığına inanmamı sağladı. Bu yüzden, $ .load() 'ın geri çağrılmasına çalıştım ama aynı sonucu elde ediyorum.

Gerçekten belirgin bir şey eksik mi?

cevap

1

Sen ko.applyBindings() (Ajax asynchronous olduğundan ve applyBindings() çağrı geçmeden önce yüklenecek içerikler için beklemek olmaz) Popup.html içeriği yüklenmiş sonra çağrılan emin olmak gerekir.

$("#dialog").load('Popup.html', function() { 
    $(this).dialog("open"); 
    ko.applyBindings({someText: "value from knockout"}, $("#container")[0]); 
}) 

load()

+0

Bkz Ben bu kadar basit inanamıyorum:

bunu yapmanın en kolay yolu bir geri çağırma işlevi sağlamaktır! Bir geri arama denediğimi sandım ama belli ki yanlış bir şey yaptı! Teşekkürler, başımı masanın üzerinde daha fazla patlamadan kurtardınız (bugün!). – Andy