代码之家  ›  专栏  ›  技术社区  ›  Dustin Getz sunsations

C可以动态生成javascript的代码

  •  2
  • Dustin Getz sunsations  · 技术社区  · 15 年前

    可以即时生成这样的代码吗?或者这是一种主要的代码味道?这怎么能做得更好呢?

    我对网络不熟悉,但我一直都在经历这些,我不太明白为什么。

    // 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 回复  |  直到 15 年前
        1
  •  4
  •   Frank Krueger    15 年前

    我不认为它是一种气味,直到你开始到处做。

    然而,考虑到这些变化将在未来有所帮助:

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

    2. 对JS代码使用模板,就像对HTML使用模板一样。这样,当您真正想要更改一些变量名时,就不必在C流控制/数据控制代码中大嚼特嚼。我建议用它辅助的视图的名称命名模板文件。如果你有 Home.aspx 那么也许您将拥有JS代码模板 Home_DoCrazyGridThing.js ,请 Home_DoOtherCrazyThing.js . 您可以编写一个简单的模板引擎,或者使用现有的许多模板引擎中的一个。

    3. 在生成代码的基础上创建一个薄层,这样很明显您对维护人员所做的事情。也就是说,有一个 JSCodeGenerator 具有不同智能级别的类(理解语言,或者只允许您从(2)中转储字符串或与模板引擎的接口)。