我目前正在使用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')”的简单教程也会有所帮助。谢谢!
答案 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
),attached
处理程序,请知道viewAttached
已弃用,而不是attached
。router
(肯定是视图模型)之前,返回一个包含vm
属性的匿名对象,尽管这可能是某些测试的遗留问题你错误地把它复制粘贴在这里。