gpt4 book ai didi

javascript - 在动态元素上调用 ko.applyBindings 不起作用

转载 作者:行者123 更新时间:2023-11-28 02:03:09 24 4
gpt4 key购买 nike

我有一个聊天室风格的应用程序,每个条目在收到后都会在客户端上进行处理,然后生成一些 html 来显示它。因为某些消息将嵌入工具提示和其他数据位,这些数据使用 knockout 绑定(bind)来显示。

现在,在查看了所有与此相关的帖子之后,这个问题的答案似乎是:

  • 确保所有元素都存在于前面但为空
  • 添加新元素时调用 ko.applyBindings

第一个方法不可行,因为您仅在聊天从服务器传入时创建元素,因此第二个选项似乎是唯一的方法,但这需要调用传入的每条聊天消息。很多人说 ko.applyBindings 可能会产生大量开销,但我认为他们的意思是,如果您要在所有元素上调用它,而不仅仅是针对特定元素。

为了让每个人都在同一页面上,以下是重要区域周围 View 的基本片段:

<!-- ko foreach: {data: ChatRoom.Entries, afterRender: ChatEntryRendered } -->
<div class="entry-content" data-bind="html: ProcessedContent"></div>
<!-- /ko -->

忽略周围的位,它基本上会围绕每个条目循环,添加一个包含 html 的 div,其中包含需要应用 knockout 的绑定(bind)。例如,ProcessedContent 可能类似于:

<span>Some content with a <span data-bind="tooltip: 'Some Content Here'">DYNAMIC</span> bit of <span class="special-text">Content</span></span>

因此,上面的 html 当前不会被 foreach 处理,因为它是动态应用于页面的,并且在每个人开始担心将 html 注入(inject) View 之前,服务器不会发送任何标记,它只是发送下来一个带有大量标记的字符串,客户端将其转换为 html。另外,在这种情况下,ChatRoom.Entries 对象会时不时地被 knockout ,因此在任何给定时间它都会在 0-200(通常是 100-200)个条目之间波动,并且其余的聊天条目缓存在本地存储中,因此在任何给定时间 View 的绑定(bind)条目永远不会超过 150 个。

这是一个 jsfiddle,在实际示例中显示了该问题。

http://jsfiddle.net/Mps4Q/8/

最佳答案

html 绑定(bind)不绑定(bind)插入的 html 的主要原因是它可能不安全。但如果您知道它是安全的,则可以使用确实绑定(bind)内容的自定义绑定(bind)。这是另一个 SO 问题的示例:https://stackoverflow.com/a/17756777/1287183

fiddle :http://jsfiddle.net/Mps4Q/9/

关于javascript - 在动态元素上调用 ko.applyBindings 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160336/

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