Модель дочернего представления в KnockoutJS вызывает исключения в Internet Explorer 8 - PullRequest
2 голосов
/ 21 декабря 2011

У меня есть что-то вроде следующего:

var ChildViewModel = function (viewModel) {
    // state
    this.viewModel = viewModel;
    this.index = ko.dependentObservable(function () {
        return this.viewModel.selections().indexOf(this);
    }, this);
    this.remove = function () {
        this.viewModel.removeSelection(this);
    };
    this.moveUp = function () {
        this.move(-1);
    };
    this.moveDown = function () {
        this.move(1);
    };
    this.move = function (direction) {
        var i = this.index();
        this.remove();
        this.viewModel.selections.splice(i + direction, 0, this);
    };

    // additional properties

};

var viewModel = {
    selections: ko.observableArray(),
    removeSelection: function (item) {
        this.selections.remove(item);
    },
    addSelection: function (event) {
        var child = new ChildViewModel(this);
        this.selections.push(child );
    }
};

ko.applyBindings(viewModel);

Когда я вызываю addSelection, я получаю исключение Object doesn't support this property or method внутри библиотеки KnockoutJS.Мое приложение отлично работает в Firefox 3.6 и Chrome.Я получаю исключение в IE8.Я использую версию 2.0 1.3 Beta KnockoutJS.

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Не используйте самозакрывающиеся теги, такие как <span data-bind='text: Text' />. Это также может вызвать проблемы в IE8, IE7 при использовании нокаута.

2 голосов
/ 21 декабря 2011

Хорошо, у меня было 2 разные проблемы.

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

 // Bad code for IE8
 this.viewModel.selections().indexOf(this);

 // this works
 this.viewModel.selections.indexOf(this);

Также я настраивалатрибут for.IE жалуется на то, что for является ключевым словом.

// Bad code for IE8
data-bind="attr: { for : logicalOperatorAndFieldId }"

// Good code for IE8
data-bind="attr: { 'for' : logicalOperatorAndFieldId }"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...