【问题标题】:javascript - using function calls in html - bad or good?javascript - 在 html 中使用函数调用 - 好还是坏?
【发布时间】:2014-02-15 08:18:21
【问题描述】:

使用 Angular 会带来很多奇怪的代码风格。比如我一直认为这个

<button onclick="myFunction()">Click me</button>

我不应该使用这种风格,除非我很懒惰并且想要快速而肮脏的代码。而且我从来没有在项目中使用过这种风格,我什至认为这很糟糕。

现在当我看到 angular

示例如下:

<div enter="loadMoreTweets()">Roll over to load more tweets</div>

从那里 http://www.thinkster.io/pick/IgQdYAAt9V/angularjs-directives-talking-to-controllers

本教程的风格很好。我不明白。那么这是否意味着前面的 onclick 示例也非常好?那么为什么至少这些天人们使用大量 jquery 时没有人使用它呢?

【问题讨论】:

    标签: javascript angularjs coding-style


    【解决方案1】:

    让我引用一本书 Angular,作者是 Brad Green 和 Shyam Seshadi

    第 2 章 ... 关于不显眼的 JavaScript 的几句话

    不显眼的 JavaScript 的想法已经被解释了很多方式,但基本原理 因为这种编码风格大致如下:

    1. 并非所有人的浏览器都支持 JavaScript。让每个人都可以看到您的所有内容并使用您的应用程序,而无需在应用程序中执行代码 浏览器。
    2. 有些人使用不同的浏览器。使用屏幕阅读器的视障人士和一些手机用户无法使用 使用 JavaScript 的网站。
    3. Javascript 在不同平台上的工作方式不同。 IE 通常是这里的罪魁祸首。您需要放入不同的事件处理 代码取决于浏览器。
    4. 这些事件处理程序引用全局命名空间中的函数。当您尝试集成其他库时会令您头疼 具有相同名称的功能。
    5. 这些事件处理程序结合了结构和行为。这会使您的代码更难维护、扩展和理解。

    在大多数情况下,当您以这种风格编写 JavaScript 时,生活会变得更好。 但也有一点不好,那就是代码的复杂性和 可读性。 而不是用 它们作用的元素,您通常必须为这些元素分配 ID, 获取对元素的引用,并设置事件处理程序 回调...

    ...

    在 Angular 中,我们决定重新审视这个问题。

    自从这些概念诞生以来,世界已经发生了变化...

    ... 对于大多数内联事件处理程序 Angular 有一个等价的形式 ng-eventhandler="expression" 其中 eventhandler 将被替换为 单击、鼠标按下、更改等。如果您想在何时收到通知 用户点击一个元素,你只需使用 ng-click 指令 像这样:

    <div ng-click="doSomething()">...</div>
    

    你的大脑是否在说“不,不,不!糟糕,糟糕,糟糕!”?好消息是 你可以放松一下。

    这些指令与其事件处理程序的前身不同之处在于 他们:

    • 在每个浏览器中的行为都相同。 Angular 会为您处理差异。
    • 不要不要对全局命名空间进行操作。您指定的表达式可以

    要了解更多详情,请阅读本书:http://www.amazon.com/AngularJS-Brad-Green/dp/1449344852

    扩展

    在cmets的讨论之后,我想补充一点。

    如此处所述:Wikipedia - AngularJS:

    Angular 是一个框架,其目标是通过 model–view–controller (MVC) 功能增强基于浏览器的应用程序,在努力使开发和测试更容易

    Model–view–controller,来自维基百科的简短摘录:

    • 控制器可以向模型发送命令以更新模型的状态(例如,编辑文档)。它还可以向其关联视图发送命令,以更改视图对模型的表示(例如,通过滚动文档)。
    • 模型在其状态发生变化时通知其关联的视图和控制器。此通知允许视图更新其表示,并允许控制器更改可用的命令集。在某些情况下,MVC 实现可能是“被动的”,因此其他组件必须轮询模型以获取更新,而不是被通知。
    • 控制器向视图告知它为向用户生成输出表示所需的所有信息。 它还可以提供通用机制来通知控制器用户输入。

    总结:

    这里最重要的部分是,View 可以将 Controller 的操作发布给用户。这正是 HTML 中的函数调用所代表的。

    【讨论】:

    • Angular 还为您处理行为和差异,这就是 OP 正在使用的
    • @BrianVanderbusch 为什么投反对票?我的回答错了吗?我试图解释,在 HTML 中使用 funciton 调用是完全可以的。事实上,这就是 MVC 模式的工作方式。我可以理解您不同意...但是这个答案有什么问题?顺便说一句,来自角度作者
    • 我投了反对票,因为 Angular 支持 最佳实践来执行 OP 的建议,而且您的帖子更像是评论而不是答案。整个帖子是一本书的引述,它可能会根据上下文产生误导。我并没有轻率地投票,特别是考虑到你是代表,但我不觉得这完全是一个“答案”,应该是一个评论。现在...如果您将响应个性化一点以将其置于上下文中...我很乐意不仅删除反对票,而且还赞成。
    • @BrianVanderbusch 附注。我想明确地告诉你:我很欣赏这里的人,他们投反对票并发表评论。我会说,这应该是关于 SO 的规则。为什么?因为它给了我们一个机会,问:出了什么问题,并改进了答案……因为您的评论可能是正确的。 感谢你的勇敢!
    • 答案很好,我认为作为评论它会太长:)
    【解决方案2】:

    这是个误会:

    使用 Angular 会带来很多奇怪的代码风格。比如我一直认为这个

    &lt;button onclick="myFunction()"&gt;Click me&lt;/button&gt;

    我不应该使用这种风格,除非我很懒惰并且想要快速而肮脏的代码。而且我从来没有在项目中使用过这种风格,我什至认为这很糟糕。

    如果您可以决定在呈现 HTML 代码时将哪个事件处理程序附加到按钮,那么使用这种代码风格是完全有效的。使用 jQuery,我们看到许多动态附加的事件处理程序,因为很多时候元素本身是动态插入的,或者是否附加事件侦听器或附加什么是动态决定的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 2011-12-06
      • 2018-07-17
      • 2012-09-28
      相关资源
      最近更新 更多