Подтвердить что ты не робот

Инициализировать нокаут, наблюдаемый из значения атрибута элемента

У меня есть элемент, который обладает атрибутом, значение которого привязано к наблюдаемому нокауту:

<text transform='matrix(1 0 0 1 1 1)' data-bind='attr:{transform:textTransform}'></text>

Когда загружается элемент, я хотел бы, чтобы наблюдаемое содержало значение, определенное в элементе dom, однако оно вместо этого загружается как undefined, и атрибут удаляется из элемента dom alltogether:

<text data-bind='attr:{transform:textTransform}'></text>

Можно ли инициализировать значение нокаута, наблюдаемого из атрибута элемента dom, и также сохранить значение атрибута элемента dom?

UPDATE: http://jsfiddle.net/5Z2SC/10/

4b9b3361

Ответ 1

Другой вариант - использовать пользовательскую привязку и собирать текущее значение элемента в функции init. Это, по-моему, гораздо более многоразовое.

ko.bindingHandlers.transform = {
    init: function(element, valueAccessor) {
        valueAccessor()(element.getAttribute('transform'));
    },
    update: function(element, valueAccessor) {
        var value = valueAccessor();
        element.setAttribute('transform', ko.utils.unwrapObservable(value))
    }
};

Конечно, ваш будет более сложным, так как вы должны что-то делать с этим свойством transform. Эта логика, вероятно, захочет перейти в раздел update.

Ответ 2

атрибуты привязки данных не обрабатываются до тех пор, пока вы не назовете ko.applyBindings(). Поэтому, если вам нужно получить данные атрибутов от ваших элементов, вы можете сделать это следующим образом.

function MyModel(){
    this.textTransform = ko.observable($('#myElement').attr('transform'));
}

ko.applyBindings(new MyModel());

в основном, вы захватываете значение атрибута и устанавливаете его как начальное значение наблюдаемого. атрибуты привязки данных должны быть шаблонами, поэтому исходные или значения по умолчанию должны быть указаны в вашей модели ViewModel.

другой вариант заключается в написании настраиваемого связующего, который может хранить значение по умолчанию, если наблюдаемый возвращает null...