javascript - knockout k.apply 不是函数

标签 javascript knockout.js

我正在尝试使用 Knockout 隐藏带有特定动画的 div,它有效但我收到此错误:

knockout-3.4.2.js:90 Uncaught TypeError: k.apply is not a function at HTMLDivElement.

这是我正在使用的 HTML:

<div id="wikipedia-text" data-bind="click: hideWikipedia($element)"></div>

我正在调用的函数:

hideWikipedia = async function(wikiText) {
    wikiText.style.animationName = "goUp";
    await sleep(1000); // The animation lasts 1s, this avoids to hide the div while the animation is going
    wikiText.style.display = "none";
};

有人可以帮助我了解问题所在吗?

最佳答案

您传递给 click 绑定(bind)的值在调用 applyBindings 时进行计算。因此,hideWikipedia 会立即被调用,导致元素在调用 ko.applyBindings 后隐藏 1000 毫秒。

click 期望收到一个函数,这意味着 hideWikipedia($element) 应该返回一个。

解决方案是更改 hideWikipedia 以返回一个仅在用户单击该元素时调用的函数:

const hideWikipedia = (wikiText) => async function() { /* logic... */ };

在一个运行的例子中(点击文本在 1000 毫秒后隐藏它):

ko.applyBindings({
  hideWikipedia: wikiText => async function() {
    wikiText.style.animationName = "goUp";
    await sleep(1000); 
    wikiText.style.display = "none";
  }
});

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
#wikipedia-text {
  background: #efefef;
  animation-duration: 1s;
}

@keyframes goUp {
  100% {
    opacity: 0;
    transform: translateY(-100%);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div id="wikipedia-text" data-bind="click: hideWikipedia($element)">Hello world</div>
<p> ⬆ Click to hide </p>

关于javascript - knockout k.apply 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745819/

相关文章:

javascript - 使用 Socket.IO 获取 404

javascript - 为什么 DOMParser 不使用注册的 customElements?

javascript - 如何在 Javascript 中获取两个日期选择器值之间的时间跨度?

javascript - 如何编写自定义断言以使用磁带测试 Node 或 javascript,或检查子字符串而不是 t.deepEquals()?

jquery - KnockoutJS 映射模型添加到 Observable 数组

external - 减少外部 JavaScript 调用(HTTP 请求)次数的最佳方法是什么?

knockout.js 根据数组是否为空来更改可见状态

javascript - KnockoutJs 更新计数器后过滤器

javascript - 将电子邮件数据绑定(bind)到 mailto 链接 json

javascript - 有没有办法用knockout完全分离模板和 View 模型?