如何让jQuery代码直接触发函数而非绑定按钮触发?
解决方案:直接触发Knockout ViewModel中的toggle函数
嘿,我明白你的需求了——你想在ShowDialog函数里直接触发OnToggleShowWindow的逻辑,不用依赖jQuery的点击事件对吧?这其实很简单,咱们来一步步理清楚:
问题根源
先看你的OnToggleShowWindow定义:
self.OnToggleShowWindow = (it) => () => it.observable(!it.observable());
这是一个高阶函数:传入it之后,它会返回一个新的无参函数,这个返回的函数才是真正执行observable切换逻辑的代码。之前你绑定按钮点击时,self.OnToggleShowWindow(self.ShowWindow)返回的就是这个无参函数,jQuery会在点击时自动执行它。但在ShowDialog里,你需要手动执行这个返回的函数。
方法1:直接执行返回的函数
在你的ShowDialog里,只需要在调用OnToggleShowWindow之后加一对(),就能执行那个切换逻辑的函数:
self.ShowDialog = function (componentId, componentName) { // 调用高阶函数拿到执行函数,再手动执行它 self.OnToggleShowWindow(self.ShowWindow)(); };
这样就能直接触发observable的切换,你的React组件订阅的事件也会被正常触发。
方法2:简化函数写法(更直观)
如果你觉得高阶函数的写法有点绕,也可以把OnToggleShowWindow改成直接执行逻辑的函数,不用返回新函数:
// 简化后的toggle函数 self.OnToggleShowWindow = (it) => { it.observable(!it.observable()); }; // ShowDialog里直接调用 self.ShowDialog = function (componentId, componentName) { self.OnToggleShowWindow(self.ShowWindow); }; // 按钮绑定也要同步调整,因为现在函数不返回新函数了 $('#showWindowButton').click(() => self.OnToggleShowWindow(self.ShowWindow));
这种写法更直观,后续维护也更简单。
额外提醒
你之前在$(document).ready里写的self.OnToggleShowWindow(self.ShowWindow)其实也没有执行切换逻辑,只是创建了函数而已。如果想在页面加载时就触发一次toggle,也要改成:
$(document).ready(function () { self.OnToggleShowWindow(self.ShowWindow)(); });
这样不管是在ShowDialog里还是其他地方,都能直接触发toggle逻辑啦!
内容的提问来源于stack exchange,提问作者user11321794
相关产品推荐
相关产品推荐

