【问题标题】:Why Knockout ignore HTML Code Binding?为什么 Knockout 忽略 HTML 代码绑定?
【发布时间】:2015-07-16 12:52:41
【问题描述】:

我正在使用 KnockoutJS 绑定到 WINJS 应用程序中的表,当我第一次运行我的应用程序时,它运行良好且绑定正确。 这是 Row.innetHTML =

 <tbody id="repeater" data-bind="foreach: labsTableArrayKo"     
  <tr class="tr">
        <td><span data-bind="text: VlabName"></span></td>
        <td><span data-bind="text: VMType"></span></td>
        <td>
           <div data-bind="if: VMType == 'Virtual Machine'">
             <span  data-bind="text: vmStatus"></span>
           </div>
           <div data-bind="if: VMType == 'RemoteApp'">
             <span  data-bind="text: 'Ready'"></span>
           </div>
        </td>
  </tr> 

但是当我更改绑定中使用的数组时,一些 HTML 代码被删除(我不知道如何?!)。 Row.InnetHTML 是 =

                 <tr class="tr">
                     <td><span data-bind="text:VlabName"></span></td>
                     <td><span data-bind="text: VMType"></span></td>
                     <td>
                      <div data-bind="if: VMType == 'Virtual Machine'"></div>
                      <div data-bind="if: VMType == 'RemoteApp'"></div>
                    </td>

                </tr>

这是我如何通过 Javascript 绑定到 HTML 代码:

 var viewModel = {labsTableArrayKo: labs_Table_Array};
 ko.cleanNode(document.getElementById("repeater"));
 var q = document.getElementById("repeater").innerHTML;
 ko.applyBindings(viewModel, document.getElementById("repeater"));

那么问题出在哪里??

【问题讨论】:

  • VMType 的值是多少?如果条件不成立,if 绑定不会呈现其内容的 HTML。
  • 你是如何在 labsTableArrayKo 中构建项目的?该数组中的对象是 POCO 还是它们是使用敲除 observables 构造的?如果像 VlabName 和 VMType 这样的成员是可观察的,那么你应该检查 'if' 绑定中的表达式。表达式 VMType == 'Virtual Machine' 的计算结果可能为 false,因为 VMType 是一个函数(可观察的) - 在这种情况下,您应该编写该表达式,例如:VMType() == 'Virtual Machine'。也许这会有所帮助。
  • Roy J,我以前不知道 .. 谢谢你。

标签: javascript html knockout.js winjs


【解决方案1】:

实际上我将 (If) 替换为 (visible) 并且它适用于我,我不知道确切原因,但它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2018-09-07
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多