【发布时间】:2017-10-16 12:26:14
【问题描述】:
我目前正在开发一个中/大型 数据驱动 Asp.net MVC 应用程序的前端,我对正确的代码组织/设计模式有一些疑问跟随。 Web 应用程序由多个页面组成,其中包含许多使用 Razor 模板定义的 Kendo UI MVC 小部件。
对于那些不熟悉剑道的人,剃刀语法被翻译成 Javascript 如下 sn-p:
我在我的 Script 文件夹中定义了两个主要文件夹,我的 js 文件结构如下:
shared //包含共享的js文件 -file1.js -file2.js
-
pages //每页一个文件
- page1.js
- page2.js
- ...
- Ticket.js // 第 4 页 :)
每个 js 文件都是一个单独的模块,使用以下模式定义:
注意:在 init 函数内部,每个回调函数都注册到窗口事件,偶尔还会注册一个 $(document).ready(function(){}) 块。
;(function () {
"use strict";
function Ticket(settings) {
this.currentPageUrls = settings.currentPageUrls;
this.currentPageMessages = settings.currentPageMessages;
this.currentPageEnums = settings.currentPageEnums;
this.currentPageParameters = settings.currentPageParameters;
this.gridManager = new window.gridManager(); //usage of shared modules
this.init();
}
Ticket.prototype.init = function () {
$("form").on("submit", function () {
$(".window-content-sandbox").addClass("k-loading");
});
...
}
Ticket.prototype.onRequestStart = function (e) {
...
}
//private functions definition
function private(a, b, c){
}
window.Ticket = Ticket;
}());
一旦我需要在模块中定义我的 Javascript 函数,我就会在页面中包含相关的 Javascript 文件。 我的对象的一个 istance 存储在一个变量中,最重要的是,一个函数绑定到小部件事件(请参阅:onRequestStart)。
HTML/JAVASCRIPT
@(Html.Kendo().DropDownList()
.Name("Users")
.DataValueField("Id")
.DataTextField("Username")
.DataSource(d => d.Read(r => r.Action("UsersAsJson", "User"))
.Events(e => e.RequestStart("onRequestStart"))))
var settings = {};
var ticket = new window.Ticket(settings);
function onRequestStart(e){
ticket.onRequestStart(e);
}
我觉得我的设计模式可能对像我这样的其他前端开发者不友好,主要是因为我选择不在 Jquery 插件中实现 Javascript 模块。
第一,我做错了什么吗?
第二,我的设计模式是否适合 Javascript 测试框架?
第三,Jquery插件必备的场景有哪些?
更新
通过上述 Razor 语法添加了 Javascript 输出。
【问题讨论】:
-
就我个人而言,我发现在 Javascript(尤其是网格)中对 Kendo 控件的“控制”要多得多。我们去年开始使用它们,在使用 Razor 实现一个多月后,仅仅因为这个原因,我们决定将所有内容都迁移到 Javascript/jQuery。不过,这只是我的看法,似乎在网上找不到任何讨论差异/利弊等的材料。
-
我的意见也是搭配 kendo ui java-script 框架。因为您对要实现的所有内容都具有完全的闪存控制权。代码会干净得多。支持非常好,因为我们已经在两个大型应用程序中使用了它,并且在过去 3 年中一直在使用它。尚未遇到任何限制。
-
您好,我是剑道 ui 和剃刀模板的新手。但是在实施大规模应用程序方面有相当的经验。就标记和 javascript 而言,这如何转换为 .DataValueField("Id") .DataTextField("Username") .DataSource(d => d.Read(r => r.Action("UsersAsJson", "User") ) .Events(e => e.RequestStart("onRequestStart")))
-
你好,我会在一个小时后发布...我还没有工作
标签: javascript jquery asp.net-mvc design-patterns kendo-ui