6

ページが読み込まれた後に作成する新しい要素をバインドするにはどうすればよいですか?

私はこのようなものを持っています

system = function()
{

    this.hello = function()
    {
        alert("hello");
    }

    this.makeUI = function(container)
    {
        div = document.createElement("div");
        div.innerHTML = "<button data-bind='click: hello'>Click</button>";
    }
}

ko.applyBindings(new system);

これを試してみたら

this.makeUI = function(container)
{
    div = document.createElement("div");
    div.innerHTML = "<button data-bind='click: hello'>Click</button>";
    ko.applyBindings(new system,div);
}    

しかし、これらの 投稿によると、それは機能しません。

4

1 に答える 1

11

ノックアウトの目標は、一連のdom要素に対して一度だけノックアウトを呼び出すことです。したがって、ドキュメント全体でapplyBindingsを繰り返し呼び出すと、複数のバインディングで問題が発生します。

applyBindingsを複数回呼び出すことが正当化される場合がいくつかあります。これは、最初のバインド時にdomになかったため、バインドされなかった部分ビューの場合です。applyBindingsをそのdom要素に選択的にスコープすることで、これらをバインドできます。

これがあなたが達成しようとしていたことの例です。問題は、作成したノードを挿入していないことでした。

http://jsfiddle.net/madcapnmckay/qSqJv/

この特定の例では、このアプローチはお勧めしません。より良い方法があります。

dom要素を動的に作成し、それらをノックアウトでバインドする場合、最も一般的なアプローチは、要素の挿入と、見つかったデータバインド属性のバインドを処理する組み込みのテンプレート機能を使用することです。

したがって、いくつかのボタンを作成したい場合は、

this.makeUI = function(container)
{
    self.buttons.push({
        text: "button " + self.buttons().length,
        handler: this.hello
    });
}

これがフィドルです。

http://jsfiddle.net/madcapnmckay/ACjvs/

お役に立てれば。

于 2012-04-07T05:17:00.823 に答える