2013-08-09 21 views
6

Sorunumu olabildiğince basitleştirdim. Sadece Internet Explorer'da (9 ve 10 onaylandı) gerçekleşir. veri yolunda initChild yönteminde geldiğinde,IE 10 + KnockoutJS = HiyerarşiRequestError?

<html> 
<body> 

    <span data-bind="text:$data[0].Mileage"></span> 
    <script type="text/javascript"> 
     window.initChild = function (ko, viewModel) { 
      window.ko = ko; 
      ko.applyBindings(viewModel, document.body); 
     } 
    </script> 
</body> 
</html> 

Benim SPA

var otherWindow = window.open('myurl', '_blank'); 
    var handler = function() { 
     otherWindow.initChild(ko, report); 
    }; 
    if (otherWindow.addEventListener) { 
     otherWindow.addEventListener('load', handler, false); 
    } else if (otherWindow.attachEvent) { 
     otherWindow.attachEvent('onload', handler); 
    } 

ben kontrol

çağırır: Ben bu konuda işlenen bir sayfa var. Ben sayfadaki HİÇBİRŞEY bağlarsanız

, ben applyBindings çağrı üzerine bir HierarchyRequestError olsun. Benim google-fu benden tamamen vazgeçti, ben tamamen yanlış olan neyim.

+0

Bu, IE etiketli. Diğer tarayıcılarda bu olmaz mı? – Amy

+0

hayır, değil. Kod (ve orijinal, daha karmaşık muadili) FF ve Chrome'da gayet iyi çalışıyor. – TDaver

+0

'$ data [0] .Mileage'nın görüntü modelinizin bir dizi olması pek olası görünmüyor. – Tyrsius

cevap

3

Bildiğim kadarıyla, bu sorunun belirtisi olduğunu söyleyebilirim: Ben, çocuk pencereye kaybolduşey ko nesne geçti ve ben çalıştım uygulayarak NASIL olursa olsun temelde Using Javascript objects across separate windows in IE

, bindings, ko bir DOM izleme hatası üzerinde koştu ve olması gerekmeyen bir yere bir şey eklemeyi denedi (muhtemelen DOM'in DOM alt öğesinin parçası).

çözüm oldu iki kat:

  • o JSON ko.mapping ile modelini seri kendi ko nesne
  • var olması, çocuğun penceresine ko (ve ko.mapping) komut dosyalarını ekleyin , dizeyi alt pencereye aktarın ve seri hale getirin. Herkes bu oluyordu NEDEN üzerinde gerçek bir açıklama elde edebilirsiniz, bunun yerine onun yanıt kabul

Korkunç davranış IE ....