zoukankan      html  css  js  c++  java
  • ie8下使用knockoutjs遇到的一个模板异常

    ViewModel中有一个数组,代码大概如下:

    function ReportViewModel(){
        var self = this;
        self.extendedProperties = ko.observableArray([]);
        ...
    }
    在从服务端获取到数据之后,使用下面的代码更新模型:
    for (var index in json.extendProperties) {
        reportViewModel.extendedProperties.push(extendProperties[index]);
    }
    knockout会根据extendedProperties使用我定义好的模板生成html,模板代码及绑定代码大概如下:
    <script type="text/html" id="template-report-extendproperty">
        <p class="the-week"><b data-bind="text:name"></b></p>
         ......
    </script>
     <!--使用汇报模板-->
     <div class="write-report clearfix" data-bind="template: { name: 'template-report-extendproperty', afterRender: extendedPropertyRendered,foreach: extendedProperties }">
    </div> 
    上述代码在ie9及以上,chrome下运行良好。但在ie8下会提示“name为undefined”。
    刚开始怀疑是ko在ie8下的bug,翻了下文档没有特殊说明,谷歌也没找到类似的问题。
    然后怀疑是不是在往reportViewModel.extendedProperties里面push数据的时候,出现了一些脏数据。问了验证这个问题,把更新ViewModel的代码修改如下:
    for (var index in json.extendProperties) {
        var extendProperty = json.extendProperties[index];
        consjole.log(index);
        console.log(extendProperty);
        createReportViewModel.extendedProperties.push(new ExtendProperty(extendProperty));
    }
    于是在控制台得到如下输出:
    奶奶的,遍历完数组之后,把Array的prototype中的indexOf也给遍历出来了。看来是for in语法在ie8下不大好使,还是老实用$.each吧。更新ViewModel的代码最终修改如下:
    $.each(json.extendProperties, function(i, n) {
        reportViewModel.extendedProperties.push(new ExtendProperty(n));
    });
  • 相关阅读:
    C++ 的那些坑 (Day 0)
    LeetCode Search a 2D Matrix II
    最大子序列和问题的解(共4种,层层推进)
    如何编译文件(gcc + nasm)
    os如何处理键盘的所有按键,显示or不显示,显示是如何显示
    汇编操作显存
    diy文件系统上创建文件的流程
    在diy的文件系统上创建文件的流程
    建立文件系统
    快速选择
  • 原文地址:https://www.cnblogs.com/FuzhePan/p/4164670.html
Copyright © 2011-2022 走看看