Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript KnockoutJS中的子视图模型在Internet Explorer 8中引发异常_Javascript_Mvvm_Knockout.js - Fatal编程技术网

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

Javascript KnockoutJS中的子视图模型在Internet Explorer 8中引发异常,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我有如下几点: var ChildViewModel = function (viewModel) { // state this.viewModel = viewModel; this.index = ko.dependentObservable(function () { return this.viewModel.selections().indexOf(this); }, this); this.remove = function

我有如下几点:

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库中得到一个
对象不支持此属性或方法
异常。我的应用程序在Firefox 3.6和Chrome中运行良好。我在IE8中遇到了一个例外。我正在使用KnockoutJS的2.0 1.3 Beta版


我做错了什么?

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

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

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

 // this works
 this.viewModel.selections.indexOf(this);
此外,我还在为属性设置
。IE抱怨
for
是一个关键词

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

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

不要使用像
这样的自动关闭标签。当您使用knockout时,它也会在IE8、IE7中引起问题。

您使用的是knockout的缩小版吗?如果是这样的话,也许给未压缩的版本一次机会,看看knockout中的哪一行出错,这可能会给可能的原因提供线索。@AlexKey-我会更新我的问题。@Daniel:我的错误-我不知道knockout有
indexOf()的实现
。可能“this”在addSelection中绑定不正确-是否从元素绑定调用addSelection?(如果是这样的话,那么绑定看起来像什么?)这并没有回答我的问题。+1,我也有一个问题,IE8声称
class
是一个关键字:
data bind=“attr:{class:InitialClass}
使用字符串解决了它:
data bind=“attr:{class':InitialClass}
我刚刚在attr绑定中遇到了IE8的问题。节省了我很多时间,谢谢!