如何保持C和Javascript代码的同步?
我认为这个问题可能会出现在任何人身上,我感兴趣的是如何最好地利用技术来保持代码库的干燥和同步 我正在开发一个ASP.NET MVC5 web应用程序。我有几个变量需要与客户端通信。比如PageType,我需要使用Google Analytics在客户端跟踪它。意图可能是多种多样的,这是一个具有相同目的的简单应用程序,仅供说明 我有一个C类,它允许我指定各种页面类型,并在它们之间切换开关大小写,例如:如何保持C和Javascript代码的同步?,javascript,c#,asp.net-mvc-5,cross-platform,dry,Javascript,C#,Asp.net Mvc 5,Cross Platform,Dry,我认为这个问题可能会出现在任何人身上,我感兴趣的是如何最好地利用技术来保持代码库的干燥和同步 我正在开发一个ASP.NET MVC5 web应用程序。我有几个变量需要与客户端通信。比如PageType,我需要使用Google Analytics在客户端跟踪它。意图可能是多种多样的,这是一个具有相同目的的简单应用程序,仅供说明 我有一个C类,它允许我指定各种页面类型,并在它们之间切换开关大小写,例如: public static class PageTypes { public const
public static class PageTypes {
public const String Home = "Home";
public const String AboutUs = "AboutUs";
public const String ContactUs = "ContactUs";
}
这在检查动态值时非常有用,例如:
String pageType = ViewBag.PageType;
if(!String.IsNullOrWhiteSpace(pageType))
{
switch(pageType)
{
case PageTypes.Home:
// do something here
break;
case PageTypes.AboutUs:
// do something else here
break;
...
。。。甚至在做比较的时候。我希望你明白我的意思。
因此,在Razor视图中,我可以输出var pageType='@ViewBag.pageType';在内联脚本的页面中,它将以var pageType='Home'的形式出现;或者在页面的内联javascript中使用一些示例,例如case。
现在,正如我对C代码所做的那样,我希望能够在javascript中切换页面类型的大小写
// This part is dynamic so will be inline script of the razor view
var pageType = 'Home';
// This part is logic so can reside in an external script
// This part is just illustration, I will worry about naming and accessibility later
// This will be in a separate script and will be included, and will be referenced, thereby providing Intellisense within Visual Studio
var PageTypes = {
Home: 'Home',
AboutUs: 'AboutUs'
};
// I should be able to do this, in an external script
switch(pageType){
case PageTypes.Home:
alert('Home!');
break;
case PageTypes.AboutUs:
alert('Not Home');
break;
default:
alert('Nothing');
break;
}
可以看出,如果C的静态类PageTypes与JavaScript中的var PageTypes同步,那么对于我们的开发人员来说,Intellisense和预定义值将是一个福音,这样他们就可以避免输入错误和值的不兼容
在C和JavaScript中获得Intellisense的同时,实现这一点的最佳方法是什么
我更喜欢C语言中影响JS的变化,而不是相反的变化。switch语句不需要转换,只需要像我提到的那样转换常量值
我认为构建过程中的脚本可能很有用,但是有没有工具/插件/替代方法来完成我提到的任务?如果我了解问题所在,您可以做的是: 使用模板引擎在html标记中的某个变量中设置pagetype抱歉,我不使用.Net,不知道如何编写它。在本例中,我在body元素中使用了data-* 在js中,检索示例中的数据类型值,我使用了jquery 变量类型=$body.datatype 在键/对象变量/对象中定义一些函数,每个函数对应于您的页面类型 var PageTypeFunctions={ 主页:功能{
},
aboutus: function() {
},
xpto: function() {
}
}
从
PageTypeFunctionstype
使用这种方法,您不必处理PageTypes变量。每个pagetype只需要一个函数。当然,您可以进行一些检查以验证PageTypeFunctions[type]存在。设置data type=type并读取它与编写内联脚本然后使用变量没有什么不同。我最关心的是同步名称。明天如果我在C中添加一个pagetype NewPageType,编写JS的Javascript开发人员如何知道新页面类型的确切名称而不询问、不知道或“键入错误”如果没有他的知识,这就是我所说的智能感知有用的地方,这在你提到的这种情况下是不会出现的。我需要变量和常量的值,我需要它们是可切换的。它们必须同步。这些是我的要求。我正在寻找解决方案。我主要关心的是同步names:您可以编写一些生成javascript代码的C代码,可能是一个包含在带标记的html标记中的javascript文件。无论如何,js开发人员必须知道有一个新的页面类型,他必须在我的示例中执行一些实现,即某个页面类型的函数。页面类型的名称是不太重要的事情之一在这种情况下,我认为。相反,它是最重要的。键入这是您浏览器的控制台F12,在Chrome:var PageTypes={home:'home'}然后按Enter键。下次键入PageTypes时。在控制台中,将显示其成员。在这里,您将能够看到默认原型的属性以及PageTypes对象的成员主页。这是一项重要功能,它也将在Visual Studio Intellisense中工作。除非定义了此PageTypes变量,否则从JavaScript中无法知道像home这样的成员在其中有哪些。但是如果已经定义了home,那么开发人员在检查/比较时,或者在您的情况下,创建新变量/函数或将其用作对象或数组的键时,不必将home错误地键入为homes或homepage,或者以其他方式键入homehome”,他可以键入并与PageTypes进行比较。home和无论其字符串值如何,比较都会起作用。我的意图是否明确?我希望控制此var PageTypes的创建和维护与我的C代码同步。