码迷,mamicode.com
首页 > Web开发 > 详细

ie8下使用knockoutjs遇到的一个模板异常

时间:2014-12-15 14:59:43      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   使用   sp   for   

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));
}
于是在控制台得到如下输出:
bubuko.com,布布扣
bubuko.com,布布扣
奶奶的,遍历完数组之后,把Array的prototype中的indexOf也给遍历出来了。看来是for in语法在ie8下不大好使,还是老实用$.each吧。更新ViewModel的代码最终修改如下:
$.each(json.extendProperties, function(i, n) {
    reportViewModel.extendedProperties.push(new ExtendProperty(n));
});

ie8下使用knockoutjs遇到的一个模板异常

标签:style   blog   http   io   ar   color   使用   sp   for   

原文地址:http://www.cnblogs.com/FuzhePan/p/4164670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!