对象不支持属性或方法IE11(兼容模式) - knockoutjs

时间:2017-02-09 12:20:19

标签: javascript jquery knockout.js

基本上我在这里想要实现的是检查存储在self.trackfile中的表格上输入/扫描的条形码是否已经在文件列表中。

self.files()是一个数组数组,每次添加文件时它会将另一个数组从self.trackfile推送到self.files(),一旦所有文件都添加到列表中,它们就可以了'跟踪'并发送回服务器。

我无法在IE11(兼容模式)下工作,这在Chrome中运行良好。我做了一些搜索,没有找到解决方法。

var fb = self.files()[x].Barcode();在IE中引发以下错误:Object doesn't support property or method 'Barcode'

如果你能帮我确定一个非常棒的解决方法!

添加文件脚本

self.addFile = function () {
    var index = 0;

    if(index < self.files().length){
        var i = 0;

        for (x in self.files()){
            var fb = self.files()[x].Barcode();
            var tb = self.trackfile.Barcode();

            if(fb==tb){
                i += 1;
            }
        }
        if(i > 0){
            alert("Error: File Already Exists in List");
        }
        else {
            self.files.push(new TrackFile(self.trackfile));
        }
   }
   else {
       self.files.push(new TrackFile(self.trackfile));
   }
}

文件示例()

[
  {
    "Location": "Location 1",
    "TransactionMode": "Send",
    "ServicePoint": "Service Point 2",
    "Status": "Incomplete / Open",
    "Comments": "",
    "Barcode": "0123456789",
    "BarcodeImageBase64": ""
  },
  {
     "Location": "Location 1",
     "TransactionMode": "Send",
     "ServicePoint": "ServicePoint 1",
     "Status": "Incomplete / Open",
     "Comments": "",
     "Barcode": "9876543210",
     "BarcodeImageBase64": ""
  }
]

的console.log(self.files()[X]); enter image description here

2 个答案:

答案 0 :(得分:0)

尝试使用索引而不是for (x in foo)构造循环遍历数组。您可能会在IE添加的数组原型上遇到一个随机属性,这显然不会包含条形码。

请参阅:Why is using "for...in" with array iteration a bad idea?

答案 1 :(得分:0)

所以我想出了如何解决这个问题而不是试图从嵌套数组中返回一个值我创建了一个只包含条形码的数组:

self.justBarcodes = ko.computed(function() {
    var barcodes = ko.utils.arrayMap(this.files(), function(item) {
        return item.Barcode();
    });
    return barcodes.sort();
}, self);

然后我循环遍历self.justBarcodes()数组以检查条形码是否已存在:

for (var x = 0; x < self.justBarcodes().length; x++){
    var fb = self.justBarcodes()[x];
    var tb = self.trackfile.Barcode();
    if(fb==tb){
        i += 1;
    }
}

现在它可以正常工作!