gpt4 book ai didi

javascript - knockout : some observables binding but not visible in Safari

转载 作者:搜寻专家 更新时间:2023-11-01 04:41:37 26 4
gpt4 key购买 nike

我有一个 Knockout View 模型,它可以在 Windows 和 Mac 上的所有浏览器中正确显示...除了 Mac 上的 Safari。

这是带有数据绑定(bind)属性的 HTML:

<div data-bind="visible: !Loading(), with: SelectedAddress">
<!-- ko if: Comment().length -->
<span data-bind="text: Comment"></span><br/>
<!-- /ko -->
<!-- ko if: Company().length -->
<span data-bind="text: Company"></span><br/>
<!-- /ko -->
<!-- ko if: Name().length -->
<span data-bind="text: Name"></span><br/>
<!-- /ko -->
<!-- ko if: Address1().length -->
<span data-bind="text: Address1"></span><br/>
<!-- /ko -->
<!-- ko if: Address2().length -->
<span data-bind="text: Address2"></span><br/>
<!-- /ko -->
<!-- ko if: ZipAndCity().length -->
<span data-bind="text: ZipAndCity"></span><br/>
<!-- /ko -->
<!-- ko if: CountryName().length -->
<span data-bind="text: CountryName"></span><br/>
<!-- /ko -->
</div>

奇怪的问题是前两个绑定(bind)字段,为CommentCompany , 不要在 Safari 上显示他们的文字。但是,它们有空格 - 您可以看到,如果该字段中没有内容,则不应有换行符,并且这两个字段的换行符正在出现。

此外,Safari 的开发者工具显示 DOM 元素已经填充了预期的文本。

甚至更多:如果您单击并突出显示文本,它就会变得可见。如果将 Safari 拖到另一个屏幕,也是如此。换句话说,如果 Safari 必须重新绘制,那么文本会被渲染,但是当应用 Knockout 绑定(bind)时,虽然文本被添加到 DOM 元素,但它不会被渲染。

我也试过像这样使用虚拟元素/无容器绑定(bind)

<!-- ko if: Comment().length -->
<!-- ko text: Comment --><!-- /ko --><br/>
<!-- /ko -->

但这对结果没有影响。

我尝试组合一个 jsfiddle 示例,但它奏效了。所以这可能与页面上所有可观察对象的相互作用或 View 模型的嵌套有关,等等

任何人都可以提出可能出错的地方或任何解决方法吗?

更新:

问题似乎与 visible: !Loading() 有关绑定(bind)到父级 <div> .

如果我删除它,那么问题就会消失。

我知道这并不能完全解决问题,但对我来说它解决了问题,因为无论如何都不再需要那个特定的绑定(bind)。

我还发现,如果我移动那两个有问题的字段,CommentCompany , 到列表的末尾,然后是接下来的两个字段,NameAddress1 ,继承问题。但是,如果我删除了两个字段,那么问题就消失了。

最佳答案

看起来像是重新排列内部内容的浏览器问题。

你能试试这个来强制 knockout 以在加载完成时重新生成整个 DOM 吗?

<!-- ko ifnot: Loading -->
<div data-bind="with: SelectedAddress">
<!-- ko if: Comment().length -->
<span data-bind="text: Comment"></span><br/>
<!-- /ko -->
<!-- ko if: Company().length -->
<span data-bind="text: Company"></span><br/>
<!-- /ko -->
<!-- ko if: Name().length -->
<span data-bind="text: Name"></span><br/>
<!-- /ko -->
<!-- ko if: Address1().length -->
<span data-bind="text: Address1"></span><br/>
<!-- /ko -->
<!-- ko if: Address2().length -->
<span data-bind="text: Address2"></span><br/>
<!-- /ko -->
<!-- ko if: ZipAndCity().length -->
<span data-bind="text: ZipAndCity"></span><br/>
<!-- /ko -->
<!-- ko if: CountryName().length -->
<span data-bind="text: CountryName"></span><br/>
<!-- /ko -->
</div>
<!-- /ko -->

关于javascript - knockout : some observables binding but not visible in Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22631844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com