如何向Durandal添加自定义javascript函数

时间:2014-01-16 01:44:42

标签: javascript durandal

我目前正在使用Durandal框架来构建一个简单的网站(我的第一个使用Durandal)并且有一个关于如何添加简单的javascript函数的问题。我想在DOM加载后调用该函数,但我不确定如何将它附加到当前的viewmodel。我遇到的问题是在DOM加载之前调用了函数,还没有创建div ID,在这种情况下是“sb-search”。

然后我尝试将该函数添加到viewmodel:

define(["plugins/router"], function (router) {

var vm = {
        viewAttached: viewAttached
    };

    return {
        router: router
    };

    function attached() {
        new UISearch(document.getElementById('sb-search'));
    }

    return vm;

});

但是,无济于事。

非常感谢任何帮助。即使是关于如何“document.write('Hello World')”的简单教程也会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

这与严格无关,但我想在评论中添加一些内容:您很可能不应在attached处理程序中扫描全局文档。当它被调用时,组合视图可能不会,也就是组合/附加自己,并且一般来说,最好不要对全局状态做出假设。此外,您可以通过不扫描整个DOM来获得性能。

致电attached时,Durandal passes the root DOM element of the view bound to the view model as the first argument to the function。用它来限制搜索。如果它在子视图/组合视图中,请使用compositionComplete处理程序,在完成所有合成后调用(事件“冒泡”)。如果它在父视图中,请使用传递给这些函数的第二个参数。如果它真的听起来太复杂,请考虑您的设计可能本身存在缺陷,请寻找MVVM指导。

完整性:

评论中提到

  • 您必须导出正确的功能(attached!= viewAttached),
  • 如果您确实打算定义由Durandal调用的attached处理程序,请知道viewAttached已弃用,而不是attached
  • 我还要补充一点,在返回router(肯定是视图模型)之前,返回一个包含vm属性的匿名对象,尽管这可能是某些测试的遗留问题你错误地把它复制粘贴在这里。