1

ページの一部にコンテンツを動的にロードするアプリがあります。コードにdata-bind属性がある場合がありますが、これはKnockOutJSによって無視されているようです。

HTML:

<div data-bind="html: code">
    this text is replaced by the JavaScript
</div>
function AppView() {
    var self = this;

    // This sets the code 
    self.code = ko.observable('<div>this shouldnt show</div>');
    self.stuff = ko.observable('this should show');
}

var app = new AppView();
ko.applyBindings(app);

// Later we override the code.  We're setting an observable, so the app should notice.
app.code('<div data-bind="text: stuff">this shouldnt show either</div>');

基本的に、ハンドラーを初期化する必要があります。すべてのバインディングを削除して再適用する必要がありますか?

フィドル

4

2 に答える 2

2

これは、ノックオットテンプレートバインディングを使用して実行できます。

このフィドルで実際の例を参照してください

あなたの場合、あなたはこのようなことをしなければなりません:

<div data-bind="template: 'myTemplate'>
    this text is replaced by the JavaScript
</div>

<script id="myTemplate" type="text/html">
   <div data-bind="text: stuff">this shouldnt show either</div>
</script>

それが機能するかどうかを確認します。

于 2013-07-08T10:23:43.487 に答える
0

すべてのバインディングを削除して再適用する必要はありません。

イベントハンドラーで値を変更できます

<div data-bind="html: code>
this text is replaced by the JavaScript
</div>
<span data-bind="click: changeClicked">Change</span>

//モデル内

 self.changeClicked = function(){
 self.code('<div data-bind="text: stuff">this shouldnt show either</div>');
 }

//ビューモデルインスタンスを使用してビューモデルからアクセスすることもできます

フィドル

于 2013-02-27T04:50:45.150 に答える