Синтаксис управления потоком без контейнеров в select не работает в IE8

0

Я использую синтаксис управления потоком без контейнеров для того, должен ли я показывать элемент в списке выбора, когда пользователь переходит к редактирующему модалю. Кажется, у меня проблемы с IE8, чтобы заставить это работать. Из того, что я читал, IE8 выделяет комментарии в select. Отлично.

Параметры, которые я вижу

  1. сделать другой вызов уровня сервиса, получая только список, который мне нужен.
  2. Я попытался возиться с doctype, но это сидит в старом устаревшем приложении, которое использует фреймы, и я не могу его изменить, иначе он сломает другие части сайта. Набор doctype: http-equiv = "X-UA-Compatible" content = "IE = EmulateIE8"
  3. как-то вставлять html в список выбора, возможно, из нокаута или jquery

Есть ли способ заставить это работать с перекрестным браузером, не требуя дополнительного вызова службы для окончательного списка?

Вот мой код для выбранного списка

<tr>
                <td><label for="EditStatus">Status</label></td>
                <td><select id="EditStatus" class="" name="EditStatus" data-bind="value: editStatus" >
                        <option value="" selected>Select...</option>
                        <!-- ko if: editStatusCanShowActive()  -->
                        <option value="A">Active</option>
                        <!-- /ko -->
                        <!-- ko if: editStatusCanShowInactive() -->
                        <option value="I">Inactive</option>
                        <!-- /ko -->
                        <!-- ko if: editStatusCanShowHold() -->
                        <option value="H">Hold</option>
                        <!-- /ko -->
                        <!-- ko if: editStatusCanShowLocked() -->
                        <option value="L">Locked</option>
                        <!-- /ko -->
                    </select></td>
            </tr>
Теги:
knockout.js
cross-browser
ie8-browser-mode

2 ответа

0
Лучший ответ

Один из вариантов - создать список в вашей модели просмотра, например:

this.availableStatuses = ko.computed(function() {
   var statuses = [];

    if (this.editStatusCanShowActive()) {
        statuses.push({ name: "Active", value: "A" });   
    }

    if (this.editStatusCanShowInactive()) {
        statuses.push({ name: "Inactive", value: "I" });   
    }

    if (this.editStatusCanShowHold)) {
        statuses.push({ name: "Hold", value: "H" });   
    }

    if (this.editStatusCanShowLocked()) {
        statuses.push({ name: "Locked", value: "I" });   
    }

    return statuses;

}, this);

Затем привяжите в своем интерфейсе, как:

<select data-bind="options: availableStatuses, optionsText: 'name', optionsValue: 'value', value: editStatus"></select>
  • 0
    Возможно, просмотреть ответы перед публикацией? Это почти точная копия моего ответа.
  • 0
    Кроме проблемы копирования / вставки в вашем решении с помощью editStatusCanShowInactive, я пометил как ответ, потому что вы добавили значение, устанавливаемое на основе отдельных символов, которые я использовал.
Показать ещё 1 комментарий
3

Есть другой, лучший вариант. Используйте вычисленный наблюдаемый для создания массива параметров, например:

this.status = ko.computed(function() {
    var options = [];
    if (this.editStatusCanShowActive()) {
        options.push('Active');
    }
    if (this.editStatusCanShowInactive()) {
        options.push('Inactive');
    }
    if (this.editStatusCanShowHold()) {
        options.push('Hold');
    }
    if (this.editStatusCanShowLocked()) {
        options.push('Locked');
    }
    return options;
}, this);

Вот пример этой работы: http://jsfiddle.net/badsyntax/8FvMR/

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню