дисплей ko.observable с html свързване

Вижте тази цигулка: http://jsfiddle.net/XuMzS/4/

html:

<input data-bind="value: Total" type="text" />
<textarea cols="50" rows="10" data-bind="value: testHtml, valueUpdate: 'afterkeydown'">
</textarea>
<p>Html:</p>
<div class="wrapper">
<div data-bind="html: testHtml"></div>
<br />
</div>

javascript:

function viewModel() {
var self = this;
self.Total = ko.observable("1337");
self.testHtml = ko.observable();

}

ko.applyBindings(new viewModel());

Това, което се опитвам да направя, е да покажа наблюдаваното Общо, като напиша кода, който е необходим вътре в текстовото поле (което показва html в div под него). Като ако написах:

<span data-bind="text: Total"></span>

Но нищо не се показва, ако напиша този код. В противен случай нормалният html работи. Има ли някакъв начин да направите това?


person Ashkan Hovold    schedule 24.05.2013    source източник
comment
Не разбирам какво питате jsfiddle.net/XuMzS/2   -  person Ven    schedule 24.05.2013
comment
Искам да направя това, което току-що направихте, като написах този код в текстовото поле :)   -  person Ashkan Hovold    schedule 24.05.2013
comment
Предполагам, че имате нужда от обратно извикване, когато актуализирате, за да приложите отново обвързвания.   -  person Ven    schedule 24.05.2013
comment
knockoutjs.com/documentation/custom-bindings.html като цяло прави същото като основата един   -  person Ven    schedule 24.05.2013
comment
не го разбирам, но ще прочета още   -  person Ashkan Hovold    schedule 24.05.2013
comment
трябва да създадете персонализирано обвързване във вашето текстово поле и да приложите някакво обвързване към html, който създавате.   -  person SiMet    schedule 24.05.2013


Отговори (2)


Направих проба, мисля, че това е, което търсите.

function viewModel() {
    var self = this;
    self.Total = ko.observable("1337");
    self.testHtml = ko.observable("<b>test</b><span data-bind=\"text: Total\"></span>");
    self.testHtmlWrapper = ko.computed(function () {
        return '<div id="dynamicContent">' + self.testHtml() + '</div>';
    });

    self.rebind = function () {
        try {
            ko.applyBindings(self, document.getElementById("dynamicContent"));
        } catch (e) {

        }
    };
    self.testHtml.subscribe(self.rebind);

}

var vm = new viewModel();
ko.applyBindings(vm);
vm.rebind();

Вижте Fiddle

Надявам се да помогне.

person Damien    schedule 24.05.2013
comment
Страхотно, точно това исках. Благодаря ти :) - person Ashkan Hovold; 25.05.2013

Защо се нуждаете от наблюдавания testHtml?

Това може лесно да се постигне с помощта на кода по-долу.

Изглед модел:

function viewModel() {
    var self = this;
    self.Total = ko.observable("1337");
}

ko.applyBindings(new viewModel());

Html:

<input data-bind="value: Total" type="text" />
<textarea cols="50" rows="10" data-bind="valueUpdate: 'afterkeydown'">
<b>test</b><span data-bind="text: Total"></span>
</textarea>
<p>Html:</p>
<div class="wrapper">
    <div><b>test</b><span data-bind="text: Total"></span></div>
    <br />
</div>

Вижте тази цигулка

person Jacques Snyman    schedule 27.05.2013
comment
Прочетете въпроса ми и ще разберете. - person Ashkan Hovold; 27.05.2013
comment
Прочетох въпроса ви. Ето защо публикувах отговора. Въпросът е малко неясен и затова не разбрах защо ви трябва. - person Jacques Snyman; 07.06.2013