1

私は Web プロジェクトに取り組んでおり、KnockoutJS を使用したいと考えています。まず、Chrome でアプリをビルドします (公式では、Knockout は IE8 で動作するようです) が、IE8 で Web アプリケーションを試すと、多くの例外が発生しました。

HTML :

<ul class="nav nav-tabs" id="tabs" data-bind="foreach: items">
    <li data-bind="'id': 'id', css: { active: 'id' == $parent.selectedTab().id }, 'click': $parent.changeTab">
        <a data-toggle="tab" data-bind="text: name, attr: { 'href': 'href' }"></a>
    </li>
</ul>

JS:

var tabs = [
    new TabViewModel(1, "Tab 1", true),
    new TabViewModel(2, "Tab 2", true),
    new TabViewModel(3, "Tab 3", false),
];

function TabViewModel(id, name, enabled) {
    var self = this;

    self.id = ko.observable("test" + id);
    self.name = name;
    self.paneId = "tab" + id;
    self.href = ko.observable("#tab" + id);
    self.displayId = "header_tab" + id;
    self.enabled = ko.observable(enabled);

    ko.bindingHandlers.changeStates = {
        init: function (element, valueAccessor) {
            var enable = valueAccessor();
            if (enable) {
                $(element).removeClass("disabled");
            } else {
                $(element).addClass("disabled");
            }
        },
        update: function (element, valueAccessor) {
            var enable = valueAccessor();
            if (enable) {
                $(element).removeClass("disabled");
            } else {
                $(element).addClass("disabled");
            }
        }
    }
}

function SurveyViewModel(tabs) {
    var self = this;

    self.items = ko.observableArray(tabs);
    self.selectedTab = ko.observable(self.items()[0]);
    self.changeTab = function (tab) {
        if (tab.enabled())
            self.selectedTab(tab);

        return true;
    };
}

ko.applyBindings(new SurveyViewModel(tabs));

問題があります:

  • 2行目、「changesStates」は例外をスローします:Unable to parse bindings. Message: TypeError: Object expected; Bindings value
  • href プロパティを持つ 3 リネン:Error: Unable to parse bindings. Message: TypeError: 'href' is undefined

前もって感謝します

4

1 に答える 1

6

私はそれがこれだと確信しています:

var tabs = [
    new TabViewModel(1, "Tab 1", true),
    new TabViewModel(2, "Tab 2", true),
    new TabViewModel(3, "Tab 3", false),
];

最後に余分なコンマがあります。IE はあまりスマートではないため、配列の 4 番目の項目が null であると見なされます。

于 2013-07-11T13:19:52.723 に答える