Single page application 使用带有durandal模板的自定义javascript脚本文件

Single page application 使用带有durandal模板的自定义javascript脚本文件,single-page-application,durandal,Single Page Application,Durandal,我使用Durandal模板从事Visual Studio 2012 MVC4项目。在此模板中,shell.js页面为我们提供了一个非常简单的菜单解决方案,其中每个元素都位于顶部。就我个人而言,我需要一些不同的东西。为此,我有一个名为dropdown.js的javascript文件,它允许我显示/隐藏子菜单。它在标准项目中运行得非常好,但我无法使用durandal模板 以下是我尝试的: 我在Index.chtml中添加了对dropdown.js脚本的引用: <script src="~/Sc

我使用Durandal模板从事Visual Studio 2012 MVC4项目。在此模板中,shell.js页面为我们提供了一个非常简单的菜单解决方案,其中每个元素都位于顶部。就我个人而言,我需要一些不同的东西。为此,我有一个名为dropdown.js的javascript文件,它允许我显示/隐藏子菜单。它在标准项目中运行得非常好,但我无法使用durandal模板

以下是我尝试的:

我在Index.chtml中添加了对dropdown.js脚本的引用:

<script src="~/Scripts/dropdown.js"></script>
如您所见,每个用“dropdown”类修饰的元素都应该被捕获。这对durandal不起作用。我放置了一些警告框来检查它。显示警报“XX”,但从未显示警报“YY”

我找了好几个小时都没找到


有什么想法吗?

我认为问题在于,当在呈现菜单之前执行dropdown.js函数时,jquery选择器不会捕获任何列表项

我认为您最好的选择是制作一个淘汰绑定,以转换下拉列表中的列表项

绑定看起来像:

ko.bindingHandlers.dropdown= {
    init: function (element, valueAccessor, allBindingsAccessor) {
        $(element).Dropdown();
    },
    update: function (element, valueAccessor) {
    }
};
并且认为:

<li class="dropdown" data-bind="dropdown : {}">
    ...
    ...
</li>

我认为问题在于,当在呈现菜单之前执行dropdown.js函数时,jquery选择器不会捕获任何列表项

我认为您最好的选择是制作一个淘汰绑定,以转换下拉列表中的列表项

绑定看起来像:

ko.bindingHandlers.dropdown= {
    init: function (element, valueAccessor, allBindingsAccessor) {
        $(element).Dropdown();
    },
    update: function (element, valueAccessor) {
    }
};
并且认为:

<li class="dropdown" data-bind="dropdown : {}">
    ...
    ...
</li>

查看您可以访问的生命周期事件


viewAttached可能会有所帮助,因为您可以在视图和dom就绪时点击进入。

查看您可以点击进入的生命周期事件


viewAttached可能会有所帮助,因为当视图和dom准备就绪时,您可以点击进入。

我也使用viewAttached来完成任务,但根据在的讨论,在开始之前,应该首先考虑自定义绑定或Durandal小部件。这取决于。。。如果您只需要等待DOM准备就绪,那么viewAttached就可以了。如果您需要更多,绑定是理想的。这与我理解Rob建议的方式不完全一样,但我必须承认,文档中并没有100%清楚地说明根据Durandal的理念何时使用哪个钩子来工作。我要求Rob将用例放在文档中。。。我认为这会澄清问题。我同意绑定处理程序更干净,但是如果您对jQuery代码在viewmodel中的使用感到满意,那么viewAttached就可以了。我也更喜欢处理程序,因为它的价值。我也使用viewAttached来完成事情,但根据在上的讨论,在走这条路线之前,应该首先考虑自定义绑定或Durandal小部件。这取决于。。。如果您只需要等待DOM准备就绪,那么viewAttached就可以了。如果您需要更多,绑定是理想的。这与我理解Rob建议的方式不完全一样,但我必须承认,文档中并没有100%清楚地说明根据Durandal的理念何时使用哪个钩子来工作。我要求Rob将用例放在文档中。。。我认为这会澄清问题。我同意绑定处理程序更干净,但是如果您对jQuery代码在viewmodel中的使用感到满意,那么viewAttached就可以了。我也更喜欢经理人,因为他们的价值。