Durandaljs и knockoutjs - Обвързването на данни не работи

Бих се опитал да бъда възможно най-кратък. Използвам DurandalJs, HotTowel SPA шаблон. Добавих следния модел на изглед

define(['services/logger'], function (logger) {
    title = 'Content';
    unpublishedContent = ko.observable('default');

    activate = function() {
        logger.log(title + ' View Activated', null, title, true);
        return true;
    }

    unpublishedContent.subscribe(function (newValue) {
        logger.log('New value is: ' + newValue);
    });
    return {
        activate: activate,
        title: title,
        unpublishedContent: unpublishedContent,
        save: function (data) {
            self = this;
            logger.log(' Content saved - ' + self.unpublishedContent(), null, title, true);
        }
    };
});

И следния изглед

<section>
    <div class="row">
        <div class="col-md-4">Left section</div>
        <div class="col-md-8">
            <form class="form-horizontal" role="form" data-bind="submit: save">
                <div class="form-group">
                    <label for="html" class="col-lg-3">Html</label>
                    <div class="col-lg-9">
                        <textarea class="form-control" data-bind="text: unpublishedContent"></textarea>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-lg-3">Your HTML</label>
                    <label class="col-lg-9" data-bind="text: unpublishedContent"></label>
                </div>
                <div class="form-group">
                    <div class="col-lg-offset-3 col-lg-9">
                        <button type="submit" class="btn btn-default">Save</button>
                    </div>
                </div>

            </form>
        </div>
    </div>
</section>

Тук трябва да отбележим няколко точки

  1. unpublishedContent собственост a ko.observable
  2. unpublishedContent е обвързан с текстово поле и етикет
  3. save методът е обвързан с формата с помощта на submit обвързване

Въпреки че моето свързване за изпращане работи, свързването на unpublishedContentне работи. Може да правя проста грешка някъде, но не мога да забележа, вероятно имам нужда от втори чифт очи, които да я гледат.

Активирах отстраняването на грешки в durandal, но не получавам много от регистрирането на durandal, първо, то не показва нищо, свързано с ko, и второ, мисля, че съм твърде нов в durandal, за да разбера неговите съобщения за отстраняване на грешки.


person Suhas    schedule 20.10.2013    source източник


Отговори (1)


Използвате грешно обвързване (text) на вашия <textarea>. Това, от което се нуждаете, е обвързването value.

От документацията:

Свързването value свързва стойността на асоциирания DOM елемент със свойство на вашия модел на изглед. Това обикновено е полезно с елементи на формуляр като <input>, <select> и <textarea>.

Така че променете гледната си точка на:

<textarea class="form-control" data-bind="value: unpublishedContent"></textarea>
person nemesv    schedule 20.10.2013
comment
това работи перфектно. Някаква идея какво трябва да използвам за обвързване на label. Имам етикет в моя html по-горе, обвързващ се със същото свойство. Докато пиша в текстово поле, искам етикетът да вземе текста в текстовото поле и да го покаже. - person Suhas; 21.10.2013
comment
за етикета все още може да се наложи да използвате обвързването text. Но ако искате да имате незабавна актуализация, трябва да използвате опцията valueUpdate: 'afterkeydown' във вашето value свързване: jsfiddle.net/fCa6y - person nemesv; 21.10.2013