在回答之前,这个问题很复杂:
我们尝试做的是通过编写一堆JavaScript来处理不同上下文中的相同功能,在我们的UI中 NOT CREATE A MESS 。我知道我可以使用JavaScript文件+面向对象的JavaScript,我正在寻找使这一切更容易的模式。
提出的一个解决方案是在客户端和服务器端都有一个MVC模型,我们可以在客户端控制器中封装JavaScript功能,然后在站点的不同部分使用它们。但是,这意味着我们有2个MVC实现!
这有多大意义吗?您将如何扩展此解决方案?还有哪些其他解决方案?
答案 0 :(得分:3)
我只是用谷歌搜索,所以拿一粒盐。 JavascriptMVC声称是一个MVC框架。同样,我没有经验,但值得一看。
答案 1 :(得分:3)
保持简单。构建您的应用程序,使其在MVC ASP.Net框架中完全正常运行。在此测试阶段不需要JavaScript。
现在通过在您的site.master(Google链接)中链接jQuery以及需要Web 2.0体验的视图底部添加好的内容,链接到适当的JS文件,这些文件可以不显眼地添加功能。关闭JS,您的应用程序会降级回上一步。
例如,除了服务器端之外,还要添加客户端验证。 JS文件会将事件处理程序附加到表单onsubmit上。然后,处理程序将使用由服务器生成的对象(用于服务器验证的相同对象),该对象最适合作为JSON对象,因为它与JS和ASP.NET兼容。该对象的成员将是检查的规则和在您选择服务器端错误的同一位置写入DOM的错误消息。你的处理程序返回false直到all都有效,而正确时为true。
您想要一个漂亮的花哨功能,例如照片的灯箱视图。为您的视图添加插件,修改标记<ul id="lightup">
...,添加代码:
$(function() { $(#lightup).showit(400); // or something like that });
你的好消息。
尝试将共享功能从服务器代码分离到Web服务或页面中,以便客户端(通过XHR和服务器)可以共享相同的功能/数据。
答案 2 :(得分:2)
两个;您应始终进行服务器端验证以及客户端验证
三点;如果你能找到一种在客户端操纵数据库的方法,那将是令人印象深刻的;)
我不知道ASP.net是如何工作的,所以我只是从我的PHP经验中说出来。
我会编写由服务器和客户端代码配对的控件。每个控件都需要一个表单,客户端逻辑和服务器端逻辑。表单由模板引擎写出,客户端逻辑附加到表单并用JS编写,服务器端逻辑是操作模型的控制器/操作对。显然,您不希望将客户端逻辑耦合到特定的操作/控制器,因此请务必定义一个可用于与控件通信的接口...
然后对于每个表单,我会在javascript中编写一个实例控件的类。例如;你可能有控制权:
{include file = "list_view.php" id = "ListView1" data = $Data.List}
会打印出你的表格。然后在你的页面控制器类中:
this.ListView1 = new ListViewController({id : "ListView1", serverCtrl : "Users"});
现在您可以使用“this.ListView1”来操作列表视图。如果用户按下下一页按钮,列表视图控制器会对新页面进行AJAX查询,并且还处理列和排序(也将委托给服务器)。
答案 3 :(得分:1)
如果您正在使用MVC,那么我假设您的视图使用模板引擎。每个页面都与一个模板相关联,每个模板通常包含一个或多个脚本的引用。问题是,您的脚本如何在模板中引用?它们是静态的还是动态的?在控制器中,您应该可以选择在用于页面的视图中包含任何脚本,而不管模板如何。我经常建议这种“在需要时包括它”的方法,因为模拟MVC客户端意味着你所说的意思 - 你现在有两个MVC框架需要维护。不仅如此 - 对于大多数客户端模型,他们可以直接访问您的服务器端模型,这会破坏服务器端MVC的目的。你现在完全绕过控制器。
说到JavaScript,最好的办法就是保持它非常简单。使用jQuery,你有更好的机会实现这一目标。每个页面都有核心,并且在同一个文件夹中有几个其他JavaScript文件,每个文件都是映射到非常特定功能的jQuery对象的插件或扩展。如果开发人员想知道功能是否已经存在,那么您只需检查JavaScript文件所在的文件系统。如果插件存在,请将其包含在控制器中以便在页面中使用。这样,您可以在服务器端构建帮助程序,这些帮助程序位于客户端应用程序和任何现有控制器之间。帮助程序特定于该功能和插件,并且您无法从客户端打开对模型的全面访问。
答案 4 :(得分:1)
不要将json / xml返回给视图,并在客户端上使用jquery dom生成它们。在体面的机器上性能明智,但我犯了这个错误,当我试图用我的iphone查看网站时需要60秒才能加载...而且我是网站上唯一的人! : - )
所以在这一点上我只是使用jquery dom注入来进行ajaxy更新而不是渲染整个页面。
答案 5 :(得分:-1)
......这取决于......
实际上,最好的事情是使用css / javascript / html开发UI 风格/行为/结构+数据,在这些日子里人们想要ajax交互 (他们在任何地方都看到了这些蠢事,所以他们期望他们不必每次都重新加载整个页面)所以我认为你应该考虑到这一点。 BTW MVC在您的内容提供时结束,并且不必是 HTML内容,您可以在视图中提供xml或json。
ASP.NET MVC允许返回内容(“TEXT”),以便您可以使用MVC组织后端 和javascript中的用户交互/行为,例如当ajax调用发送到服务器时 您正在调用应用程序的Controller部分,因此您可以调用Ajax操作切换到呈现为JSON的ajax模型并返回到UI的JS部分(行为部分)。
由于Behavio部分是在View部分中定义的(初始View由CSS / HTML JS组成)所以只要是表示部分我认为你就没有打破MVC模式。
PS。我忘了说明显数据库操作会留在你的模型中 (您可以将模型视为数据访问层+业务对象层保留的位置)