有什么好方法可以处理这种混乱,不必要且非真实动态的JavaScript生成:
var <%# JavascriptId %> = new BusinessChart(
'<%# JavascriptId %>',<%# CurrentUserId %>,'<%# ChartId %>'
,'<%# Helper.GetBaseUrl() %>','<%# ChartPath %>'
,'<%# Helper.ResolveUrl("~", true) %>'
);
<%# JavascriptId %>.Init();
我找到了other question,但答案似乎没有解决嗅觉的来源。
我看到一些具体问题:
我已经开发了一些想法来处理上述问题(声明一个全局的“应用程序”对象,jQuery +在DOM元素上声明类),但我想听到更多有关这方面的想法。
答案 0 :(得分:1)
你问的是代码气味,所以我猜代码情况的模糊性是恰当的。例如,与BusinessChart有什么关系。这里有很多我们不知道的东西。但这就是我闻到: 只提到你提到的第一个问题对我来说真的很糟糕。很奇怪,必须在服务器上指定。我想可能是一个原因,但我很难想象它。至于变量CurrentUserID,可能很容易就有这么好的理由。例如,BusinessChart可以根据用户的角色过滤不同的数据。
对于GetBaseUrl和ResolvUrl,这也可能是合法的。 BusinessChart可能需要一个完全限定的URL,并且GetBaseUrl / ResolveUrl是提供这一功能的中心位置,因此您只需要在一个位置进行配置更改。为什么不使用web.config引用呢? Errrr,也许有多个使用这些路径的Web应用程序或部署,Helper类从一个公共数据库获取这些URL,为多个应用程序或部署提供一个公共配置位置。
至于使用代码隐藏。 。 。有时这是必要的。虽然通常像这样的动态代码是不必要的,但有时候复杂性那里会实现最大的整体简单性。
我试图将现有代码的疑问带给您,正如您所看到的那样。但是,我不会惊讶地发现,正如您所怀疑的那样,您示例中的所有动态代码确实绝对无用。我会说你的嗅觉似乎很好!而你说的第一个问题是最糟糕的。
答案 1 :(得分:1)
我不知道它是否能解决您的确切问题,但Rick Strahl的this article可能会引起您的兴趣。
答案 2 :(得分:1)
也许您应该更多地关注数据驱动的JavaScript。将您的数据存储为JSON,并让您的代码执行“代码”操作:
// This is the dynamic data part
var charts = [{
Id: '<%# JavascriptId %>',
UserId: <%# CurrentUserId %>,
ChartId: '<%# ChartId %>',
BaseUrl: '<%# Helper.GetBaseUrl() %>',
ChartPath: '<%# ChartPath %>',
HomePath: '<%# Helper.ResolveUrl("~", true) %>'
}];
// This is just code that can be stored away
// in the application's static javascript
function initChart(data) {
var chart = new BusinessChart(
data.Id, data.UserId, data.ChartId,
data.BaseUrl, data.ChartPath, data.HomePath);
char.Init();
return chart;
}
更好的是,编写一个返回此JSON的REST请求处理程序,而不是将其放在HTML文件中。
现在你非常接近AJAX应用程序。