内联方法绑定一个不好的做法?

时间:2013-09-19 17:35:14

标签: javascript html angularjs semantic-web separation-of-concerns

我一直在研究Angular,它使用HTML属性将事件绑定到模型,例如:

<form ng-submit="addTodo()">

这不是一种不好的做法吗?我知道使用内联JavaScript如onclick被认为是一件非常糟糕的事情。

我担心分离问题。这种方法不会违背吗?使用id或class属性并在JavaScript中基于它们将事件绑定到DOM元素是不是更清晰?这似乎不那么混乱。

我也关注ng属性使HTML语义更少。 HTML应该尽可能保持语义,只有表示信息。

我目前正在调查是否将Angular用于我正在处理的网络应用,这是我关注的问题之一。我更倾向于使用类似于RequireJS的香草JS。

2 个答案:

答案 0 :(得分:1)

内联绑定练习

新的JavaScript框架似乎正在重新审视在标记中完成的绑定。很长一段时间,这被认为是不好的做法,而且很大程度上仍然存在。意见不同。支持者认为以这种方式绑定标记更为明确。您不需要使用可能更改的其他类来创建绑定。

我想说如果你打算使用这种内联绑定,它们应该非常简单。也就是说,您应该只引用绑定中的单个方法,而不是定义内联方法。

ng属性

我相信Angular可以让您使用data-ng-*代替它,这会使其有效/语义正确。

答案 1 :(得分:0)

好问题!

实际上,在dom中绑定事件或行为实际上是最糟糕的做法。

¿但为什么?

让我们假设,您知道这是最简单的方法,也是最快的方法,只需对元素进行onclick并在脚本标记中定义函数,但在几个元素/函数之后,您需要进行大量维护码。这就是为什么它是一种不好的做法。

在角度中所有代码都是'范围',这意味着(最重要的)一个DOM范围和一个JS范围,其中代码是有效/执行的,因此您可以轻松地重新使用指令/控制器(主要),而无需很多全局函数绑定

关于你揭露的要点

  

我担心分离问题。这种方法不会违背吗?使用id或class属性并在JavaScript中基于它们将事件绑定到DOM元素是不是更清晰?这似乎不那么混乱。

是的,如果您认为这种方式是将视图与控制器混合在一起,但在像骨干这样的框架中,您可以在控制器中定义css选择器的行为。 混合模式不一样吗? - 不!角度方式更好的原因是让你为控制器制作了很多模板,将js代码简化为数据操作。

  

我也关注ng属性使HTML语义更少。 HTML应该尽可能保持语义,只有表示信息。

对谁,用户或程序员的语义?我的意思是ui-behavior是基于dom的软件中视图的一部分,因此您可以在不触及控制器的情况下重写模板。当您输入ng-attibutes时,您正在为控制器标记(htMl)以响应用户事件。通过描述dom中的行为,你仍然是语义,我认为,它对你的代码更好。

  

我目前正在调查是否将Angular用于我正在处理的网络应用,这是我关注的问题之一。我更倾向于使用类似于RequireJS的香草JS。

AngularJS它是一种新的组织代码的方式,如果你使用vanillaJS,你会发现js pretty util来保存你的代码,我保证你将保存至少80%的css选择器和行为描述。