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

如何向Durandal添加自定义javascript函数,javascript,durandal,Javascript,Durandal,我目前正在使用Durandal框架构建一个简单的站点(这是我第一次使用Durandal),对于如何添加一个简单的javascript函数,我有一个疑问。我想在加载DOM后调用该函数,但不确定如何将其附加到当前viewmodel。我遇到的问题是,在加载DOM之前调用函数,并且尚未创建div ID,在本例中是“sb search” 然后,我尝试将该函数添加到viewmodel: define(["plugins/router"], function (router) { var vm = {

我目前正在使用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')”的简单教程也会有所帮助。谢谢

这没有严格的关系,但我想补充一下评论中所说的:您很可能不应该在所附的
处理程序中扫描全局文档。当调用它时,组合视图本身可能还没有组合/连接,一般来说,最好不要对全局状态进行假设。此外,您还可以通过不扫描整个DOM来获得性能

调用附加的
时。使用它来限制搜索。如果它位于子视图/合成视图中,请使用
compositionComplete
处理程序,在所有合成完成后调用(事件“起泡”)。如果它位于父视图中,请使用传递给这些函数的第二个参数。如果真的听起来太复杂,请考虑你的设计本身可能有缺陷,寻找MVVM指导。 完整性:

评论提到

  • 您必须导出正确的功能(
    附加的
    !=
    查看附加的
  • 如果您确实打算定义Durandal调用的
    attached
    处理程序,请知道
    viewAttached
    不赞成使用
    attached
  • 我还想补充一点,在返回
    vm
    (查看模型)之前,返回一个包含
    router
    属性的匿名对象,尽管这可能是您所做的一些测试遗留下来的,并且错误地复制粘贴在这里

你的函数和你用来显示它的对象不匹配。是的,编辑{viewAttached:viewAttached}到{viewAttached:attached}@JamieHammond,尽管他很可能真的想定义Durandal
attached
处理程序,所以@Craiger,让那
vm={attached:attached}
@tne这就是我们要表达的观点……我在回答大多数问题时遇到的问题是,人们没有指定Durandal的版本-我认为很多人仍然在使用John Papa的热毛巾模板,这是1.x版本,考虑到2.0带来的巨大变化,该版本现在有点过时了。如果文档可以更详细地介绍附件,那就太好了,因为我看到了很多关于这个主题的问题。