javascript - 每当组件加载到 DOM 时,Knockout.js 回调

标签 javascript knockout.js

我正在使用 knockout.js 编写一个单页应用程序。我想让应用程序中的所有文本框都以某种方式运行,例如选择焦点上的所有当前文本。

为了避免重复的解决方案,例如向所有输入字段添加自定义绑定(bind),或者在我加载组件/模板的任何地方实现 afterRender,我想在一个集中的位置解决这个问题,例如处理全局事件等。

我的第一个预感是实现一个自定义组件加载器,下面的代码可以第一次加载组件,但对于连续加载来说就不是那么好了。但是它应该提供一个很好的例子来说明我正在尝试做的事情

总结:在提供的代码中绑定(bind)到 focusHandler 的事件是我希望在组件被 knockout 渲染时运行的代码。我想避免在每次加载组件或模板时都必须指定它。

var callbackHandle: number;
var focusHandler = (e: JQueryEventObject) => {
    var $this = $(e.target);

    $this.select();

    window.setTimeout(() => {
        $this.select();
    }, 1);

    // Work around WebKit's little problem
    function mouseUpHandler() {
        // Prevent further mouseup intervention
        $this.off("mouseup", mouseUpHandler);
        return false;
    }

    $this.mouseup(mouseUpHandler);
};
var templateAutoSelectInputTextLoader = {
    loadTemplate: (name, templateConfig, callback) => {

        var internalCallback = (data: any) => {
            callback(data);
            // Throttling so that this only happens once (after all components are loaded)
            if (callbackHandle) {
                clearTimeout(callbackHandle);
            }

            callbackHandle = window.setTimeout(() => {
                $("input[type=text]").off("focus", focusHandler).on("focus", focusHandler);
                console.log("Components loaded");
            }, 200);

        };

        ko.components.defaultLoader.loadTemplate(name, templateConfig, internalCallback);
    }
};

ko.components.loaders.unshift(templateAutoSelectInputTextLoader);

最佳答案

既然是SPA,页面一直在动态修改。但是,body 元素只创建一次,对吗?您可以使用附加到 body 的委托(delegate)事件。

$('body').on('focus', 'input[type="text"]', function (){
   //your function here
}); 

关于javascript - 每当组件加载到 DOM 时,Knockout.js 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606542/

相关文章:

php - 通过 PHP 加载 Javascript

javascript - 告诉用户何时返回浏览器历史记录

javascript - 是否必须传递 Prop 来 react 功能组件?

javascript - Typescript 中此子范围的问题

javascript - 如何使用 knockout 可观察变量删除 html 内部的 Html 元素

php - KnockoutJS - 发送包含 javascript 对象值的表单会导致超时

javascript - JavaScript 对象的性能相关问题

javascript - 淡入淡出的一些问题(jQuery)

ruby-on-rails - ajax 调用在 rspec 测试中失败

javascript - 如何防止可观察量耦合?