KnockoutJS 中的子视图模型在 Internet Explorer 8 中引发异常

发布于 2024-12-22 10:35:41 字数 1206 浏览 0 评论 0原文

我有类似以下内容:

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 时,我在 KnockoutJS 库中收到 Object does not support this property or method 异常。我的应用程序在 Firefox 3.6 和 Chrome 中运行良好。我在 IE8 中遇到异常。我正在使用 KnockoutJS 2.0 1.3 Beta 版本。

我做错了什么?

I have something like the following:

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);

When I call addSelection, I have get a Object doesn't support this property or method exception inside the KnockoutJS library. My application works fine in Firefox 3.6 and Chrome. I get the exception in IE8. I'm using version 2.0 1.3 Beta of KnockoutJS.

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

∞琼窗梦回ˉ 2024-12-29 10:35:41

好吧,我有两个不同的问题。

首先,我删除了获取数组值的方法,而是使用可观察数组。

 // 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 }"

Ok i had 2 different problems.

First, I removed the method to get the value of the array, instead used the observable array.

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

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

Also, I was setting the for attribute. IE complains about that for is a keyword.

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

// Good code for IE8
data-bind="attr: { 'for' : logicalOperatorAndFieldId }"
时光瘦了 2024-12-29 10:35:41

不要使用自闭合标签,如 。当您使用淘汰赛时,它也会在 IE8、IE7 中导致问题。

Do not use self closing tags like <span data-bind='text: Text' />. It also can cause problems in IE8, IE7 when you use knockout.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文