C#代码动态生成JavaScript

3

动态生成代码是否可行?还是这是一个主要的代码问题?如何改进呢?

我对 web 开发很陌生,但是我经常遇到这个问题,而且不太理解为什么会出现这种情况。

// Create a js function that applies foo to each group of controls
foreach (KeyValuePair<string, Dictionary<Control, string>> pair in maps)
{
    js.Append(pair.Key);
    js.Append("=function(grid){Prm.remove_endRequest(");
    js.Append(pair.Key);
    js.Append(");if(grid && grid._element)"); //   ... blah blah blah

}
page.ClientScript.RegisterClientScriptBlock(page.GetType(), key + "Ajax", 
    js.ToString(), true);
1个回答

4

在你到处都开始这样做之前,我不认为它是一种气味。

考虑以下更改,这将有助于未来:

  1. 编写数据驱动的JS函数,并仅动态生成它们所需的数据。这样,所有JS代码都可以保存在快速静态文件中,服务器只发送数据。这比(2)和(3)更好的设计变更 - 而且真的不难。只需考虑您当前的代码生成器需要的数据,提供该数据而不是JS代码,然后将JS代码包装在“工厂函数”中,接受该数据作为输入。

  2. 像使用HTML模板一样使用JS代码模板。这样,当您真正想要更改某些变量名称时,就不必在C#流控制/数据控制代码中进行操作。我建议使用视图名称命名模板文件。如果您有Home.aspx,那么可能会有JS代码模板Home_DoCrazyGridThing.jsHome_DoOtherCrazyThing.js。您可以编写一个简单的模板引擎或使用现有的许多引擎之一。

  3. 创建一个薄层覆盖生成代码,以便维护者明确您正在进行的操作。也就是说,使用具有不同智能级别的JSCodeGenerator类(了解语言或仅允许您将字符串转储到其中或与(2)中的模板引擎接口)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接