2013-04-02 66 views
3

由于某种原因,我的代码在IE8中生成以下错误,但不是在任何普通浏览器中。KnockoutJS`与绑定和IE8

SCRIPT5022: Unable to parse bindings. 
Message: TypeError: 'logoSrc' is undefined; 
Bindings value: 'attr': { 'src': logoSrc } 

我确认了logoSrc属性确实是在绑定之前确定的,即使在IE8中,但仍然失败。禁用与logoSrc的绑定只会导致下一个绑定行失败。

html在下面。我知道我之前使用过绑定,所以我非常确定这不是问题,并且html似乎已被正确关闭。

<div data-bind="visible: mode() === 'print'" class="container-fluid"> 
    <!-- ko with: printVm --> 
    <div class="row-fluid"> 
     <div class="span12"> 
      <div class="page-header"> 
       <div class="pull-right" style="width:140px;height:60px;overflow:hidden;"> 
        <img data-bind="'attr': { 'src': logoSrc }" src="" /> 
       </div> 
       <h2>Invoice Statement - <span data-bind="text: itemZeroClientName"></span></h2> 
      </div> 
      <strong>Invoice number:</strong> <span data-bind="text: invoiceId"></span> 
      <strong>Invoice date:</strong> <span data-bind="text: userInfo().invoiceDateDisplay"></span> 
      <strong>Client number:</strong> <span data-bind="text: itemZeroClientId">22365</span> 
      <hr /> 
     </div> 
    </div> 
    <div class="row-fluid"> 
     <div class="span6 cr-tablet6 cr-phone6"> 
      <h4>Billed by <span data-bind="text: companyNameDisplay"></span></h4> 
      <span data-bind="html: companyInfo"></span> 
     </div> 
     <div class="span6 cr-tablet6 cr-phone6"> 
      <h4>Billed to</h4> 
      <span data-bind="html: clientInfoDisplay"></span> 
     </div> 
    </div> 

    <div class="row-fluid"> 
     <div class="span12"> 
      <hr /> 
      <table id="printInvoiceTable" class="table"> 
       <thead> 
       <tr> 
        <th class="date">Date</th> 
        <th class="name">Provider</th> 
        <th class="code">Proc Code</th> 
        <th class="location">Location</th> 
        <th class="time">Hours</th> 
        <th class="units">Units</th> 
        <th class="charge">Charges</th> 
       </tr> 
       </thead> 
       <tbody data-bind="foreach: items"> 
        <tr> 
         <td data-bind="text: dateDisplay"></td> 
         <td data-bind="text: orgName"></td> 
         <td data-bind="text: procedureCodeString"></td> 
         <td data-bind="text: location"></td> 
         <td class="formatted-number" data-bind="text: timeWorkedHrs"></td> 
         <td class="formatted-number" data-bind="text: (unitsOfService() || 0).toFixed(2)"></td> 
         <td class="formatted-currency" data-bind="text: (clientCharges() || 0).toFixed(2)"></td> 
        </tr> 
       </tbody> 
       <tfoot> 
        <tr> 
         <td></td> 
         <td></td> 
         <td></td> 
         <td></td> 
         <td class="formatted-number" data-bind="text: totalWorkedHours"></td> 
         <td class="formatted-number" data-bind="text: totalUnitsOfService"></td> 
         <td class="formatted-currency" data-bind="text: totalClientRate"></td> 
        </tr> 
       </tfoot> 
      </table> 
     </div> 
    </div> 
    <!-- /ko --> 
</div> 
+0

[attr绑定](http://knockoutjs.com/documentation/attr-binding.html)不在属性上使用引号,也没有绑定在绑定名称上使用引号。它应该看起来像这样:'' – Tyrsius

+0

另外,你可以发布你的viewmodel代码,'with'绑定看起来很好。 – Tyrsius

+1

@Tyrsius - 查看模型代码有点大 - 我会看看我是否可以用简单的小提琴重新制作。另外,attr绑定没有引号也没问题。事实上,如果你选择使用'attr'来绑定'class'属性(即使css绑定会做同样的事情),你可以*引用'class'这个单词,否则IE8会出错。 –

回答

2

正如上文所述,似乎问题是与IE8删除注释(因而虚拟绑定在某些情况下),并已reported on the knockout forums

+0

我想提出一点关于混合'与'和其他绑定在同一元素上的警告。如果'mode'()==='print',使用:printVm',只要'mode'发生变化,'with'绑定也会被更新并重新呈现该元素的全部内容。见http://www.knockmeout.net/2012/06/knockoutjs-performance-gotcha-3-all-bindings.html –

0

我曾与在IE8的jQuery文件上传使用的问题。我也有评论的问题,并能通过转义评论条件来修复它。淘汰赛网页提到了这个警告。