knockoutjs attr привязка и IE7 - PullRequest
       33

knockoutjs attr привязка и IE7

2 голосов
/ 01 февраля 2012

Этот синтаксис работает в FF

<input data-bind="checked: isRequest, attr: { name: 'id_' + id }" type="checkbox" />

Но в IE7 атрибут имени не отображается?

редактирование: Другие атрибуты, такие как title, странные, но мне нужен атрибут name, чтобы я мог публиковать данные: /

Ответы [ 2 ]

4 голосов
/ 04 апреля 2012

Я столкнулся с подобной проблемой, пытаясь быть хитрым с attr: {'class': что-то, 'style': somethingElse} и прекратил попытки заставить привязку attr работать в IE7.

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

ko.bindingHandlers.customCss = {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var css = ko.utils.unwrapObservable(valueAccessor());
        $(element).addClass(css);
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        var css = ko.utils.unwrapObservable(valueAccessor());
       $(element).addClass(css);
    }
};

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

ko.bindingHandlers.customName= {
    init: function (element, valueAccessor, allBindingsAccessor) {
        var name= ko.utils.unwrapObservable(valueAccessor());
        $(element).attr('name', 'id_' + name);
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        var name= ko.utils.unwrapObservable(valueAccessor());
        $(element).attr('name', 'id_' + name);
    }
};

затем свяжите ваш ввод как:

<input data-bind="checked: isRequest, customName: id }" type="checkbox" />
1 голос
/ 11 июля 2012

Я знаю, что это старый, но я нашел обходной путь к проблеме IE6 / 7.Решение было найдено путем просмотра последнего нокаутированного источника для их привязки «uniqueName»:

ko.bindingHandlers['uniqueName'] = {
    'init': function (element, valueAccessor) {
        if (valueAccessor()) {
            element.name = "ko_unique_" + (++ko.bindingHandlers['uniqueName'].currentIndex);

            // Workaround IE 6/7 issue
            // - https://github.com/SteveSanderson/knockout/issues/197
            // - http://www.matts411.com/post/setting_the_name_attribute_in_ie_dom/
            if (ko.utils.isIe6 || ko.utils.isIe7)
                element.mergeAttributes(document.createElement("<input name='" + element.name + "'/>"), false);
        }
    }
};

Просто используйте тот же механизм для объединения атрибутов, и это будет иметь тот же эффект, что и изменение атрибута name, но вIE6 \ 7 дружественный путь.

...