Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScriptMVC中使用继承组织带有控制器的查看模板的路径?_Javascript_Path_Views_Controllers_Javascriptmvc - Fatal编程技术网

如何在JavaScriptMVC中使用继承组织带有控制器的查看模板的路径?

如何在JavaScriptMVC中使用继承组织带有控制器的查看模板的路径?,javascript,path,views,controllers,javascriptmvc,Javascript,Path,Views,Controllers,Javascriptmvc,现在我几乎整天都在为以下内容而挣扎:我有两个控制器,其中控制器A扩展$.controller,控制器B扩展控制器A。控制器A为其元素上的一些常见事件提供事件处理程序,控制器B为控制器A不应该知道的事件提供额外的事件处理程序。现在的问题是,我发现每个控制器都需要一些模板来输出对话框,根据控制器实例的不同,这些对话框找不到。在我的控制器中使用模板时,我遵循以下链接,因此始终使用模板文件的相对路径,这将导致从jQuery.controller.\u calculatePosition计算出绝对路径

现在我几乎整天都在为以下内容而挣扎:我有两个控制器,其中控制器A扩展$.controller,控制器B扩展控制器A。控制器A为其元素上的一些常见事件提供事件处理程序,控制器B为控制器A不应该知道的事件提供额外的事件处理程序。现在的问题是,我发现每个控制器都需要一些模板来输出对话框,根据控制器实例的不同,这些对话框找不到。在我的控制器中使用模板时,我遵循以下链接,因此始终使用模板文件的相对路径,这将导致从jQuery.controller.\u calculatePosition计算出绝对路径

问题似乎是,在计算路径时,似乎只使用“当前实例”的类名,而不考虑基类。这样,在执行基类控制器A的事件处理程序时,控制器B实例的计算路径具有实例控制器B的名称。但是,此控制器没有并且不应该有控制器A的模板,只有控制器A应该知道它在模板上。随着每个继承级别的增加,这个问题都会出现,例如,因为控制器C继承了控制器B,因为控制器C后面的元素不允许使用控制器B的一些事件处理程序

只有在我提供此.view(“//app/controller\a/views/some\u template.ejs”)的完整路径时,才能覆盖自动计算,这是我一直试图避免的,因为它需要输入大量文本,并且在重构或其他过程中很容易中断路径

我试图在提供路径公共部分的控制器上编写一个函数,或者将其保存在静态成员或类似的东西中,但这两个函数都不起作用,因为控制器B的实例似乎总是覆盖控制器a的所有内容,我无法从控制器B实例调用控制器a实例。我需要的是C++类中的私有变量,这些类只能对类本身的实例可见,不能通过扩展类来重写。但是我不能让这样的东西工作,也不能使用_super,因为这样每个扩展控制器首先需要实现基类中的附加函数,.prototype仅引用控制器实例B,由于某些原因,我甚至无法使用hasOwnProperty来检测事件处理程序是否来自基类

在我需要硬编码每个新控制器中模板的完整路径之前,您是我最后的机会。有没有什么方法或最佳实践可以让我使用扩展控制器的相对模板路径和_calculatePosition的魔力?或者在每次调用this.view时是否不需要键入完整路径


谢谢你的帮助

使用此表单,如链接页面所示:

// renders with views/shared/top.ejs
el.before( this.view("shared/top", {phrase: "hi"}) );

只有您将使用一个唯一的名称,如“a/something.ejs”,但您在控制器a或B中加载的所有视图都使用“a”。

这不起作用,因为默认情况下每个控制器都有自己的视图文件夹,并且在提供相对路径的路径计算过程中,使用当前控制器实例的视图文件夹。例如,控制器A实例的结果路径为[…]/controller_A/views/[…].ejs,而控制器B实例的结果路径为[…]/controller_B/views/[…].ejs。除此之外,控制器B不应该知道控制器A的任何视图,除非它想覆盖其中的一些视图或其他视图。我相信你。我肯定你试过了。但那页上的文档不是这样读的。嗯?