簡體   English   中英

Knockout.js-“ html”綁定中的“ value”綁定

[英]Knockout.js - “value” binding within an “html” binding

我正在開發一個需要根據某些值動態生成HTML的應用程序。 我將以下代碼放到動態HTML所在的位置:

<div data-bind="html: extraHTML"></div>

我的javascript文件中有一個對象設置,其中包含HTML代碼的各種塊,一旦應用程序啟動,這些塊將被選擇。 例如,對象之一包含以下內容:

{ type: 'Int', html: '<input style=\'margin: 0\'type=\'number\' min=\'0\' data-bind=\'value: selectedExtra, valueUpdate: \'input\'\' />' }

當我運行該應用程序時,沒有任何錯誤,並且HTML正確綁定,但是,當我在輸入字段中插入一個值時,可觀察到的“ selectedExtra”不會更新。 當我將包含“ html”綁定的div標簽替換為以下內容時:

<input style="margin: 0" type="number" min="0" data-bind="value: selectedExtra, valueUpdate: 'input'">

可觀察的更新恰好可以做到這一點。 我想知道的是,是否存在在“ html”綁定中動態分配“值”綁定並實際更新值的問題。 也許我還錯過了另一種解決方案?

任何幫助將不勝感激,謝謝!

更新

我創建了一個jsfiddle來在這里演示問題。

當您調用applyBindings時,ko將遍歷dom節點以“綁定”到元素。 您的html已生成,因此永遠不會為這些元素調用ko.applyBindings。

您有2個選項:-使用Wayne注釋的模板,(推薦)-如果您確實想從可觀察對象生成html並綁定ViewModel,則可以使用自定義綁定。 您實際上是在這里創建一些自定義模板系統。

HTML:

<div data-bind="htmlTemplate:html"></div>

bindinghandler:

ko.bindingHandlers.htmlTemplate = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
       // NOTE: you could return false and ommit the update code, it probably works, but this way you have more control what happens when the html is updated
       return { controlsDescendantBindings:true };
    },
    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        // remove old bindings
        ko.cleanNode(element);

        // update the inner html, unrwap to support observables and/or normal properties            
        element.innerHTML=ko.unwrap(valueAccessor());

        // apply the view model to the content of the element
        ko.applyBindingsToDescendants(viewModel,element);
    }
};

JSFIDDLE: http : //jsfiddle.net/martijn/6b87vw3L/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM