2017-10-10 14 views
1

私はWebアプリケーションを使用しています。私はKnockout.jsをクライアント側で使用しています。Iframeの追加時にKnockout.jsデータバインドが機能しません

iframeを追加するまでは問題ありません。 iframedata-bindは問題ありませんが、外側は機能しなくなります。私はボタンをクリックしたり、外側のページで何かをすることはできません。

これは私のホームページです:

<!DOCTYPE html> 
<html> 

<head> 
    <script data-require="[email protected]*" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script src="knockout-3.4.2.js"></script> 
    <script src="script.js"></script> 
</head> 

<body> 
    username: 
    <input data-bind="value: name" /> 
    <br /> age: 
    <input type="text" data-bind="value: age" /> 
    <button data-bind="click: increase">Increase</button> 
    <br /> 
    <button onclick="show()">show</button> 
    <script> 
    var show = function() { 
     document.getElementsByTagName("body")[0].innerHTML = document.getElementsByTagName("body")[0].innerHTML + '<div><iframe src="iframe.html" width="300" height="300"></iframe></div>'; 
    } 
    </script> 
</body> 

</html> 

そして、これはそのモデルである:

$(document).ready(function() { 
    function Outer(){ 
    var self = this; 
    self.name = ko.observable("thomas"); 
    self.age = ko.observable(15); 

    self.increase = function(){ 
     self.age(self.age() + 1); 
    } 
    } 

    ko.applyBindings(new Outer()); 
}); 

右が私はage価値を高めるために増加ボタンをクリックすることができます。しかし、の表示をクリックすると、iframeと表示され、外側のページのデータは消えます。

これはiframeであり、そのモデル:

$(document).ready(function() { 
    function Inner(){ 
    var self = this; 
    self.message = ko.observable(""); 
    self.text = ko.observable("begin"); 

    self.postData = function() { 
     if (self.message().trim() !== '') { 
     self.text(self.text() + "\n" + self.message()) 
     } 
     self.message(''); 
    } 
    } 

    ko.applyBindings(new Inner()); 
}); 

This is my example on Plunker

+0

コードを調べて、ブラウザのJS開発ツールを使用して試してみましたか? – jdv

答えて

0

あなたshow機能は、新しいコピーを使用してページ内のhtmlのすべてを置き換えています。これらのコピーはもうノックアウトに束縛されません。代わりにを別の方法で追加する必要があります。たとえば、ノックアウトを使用することができます!

<button data-bind="click: function() {showing(true)}">show</button> 
<div data-bind="template: {name: 'iframe', if: showing}"></div> 

<script type="text/html" id="iframe"> 
    <iframe src="iframe.html" width="300" height="300"></iframe> 
</script> 
関連する問題