【问题标题】:coffeescript jQuery - how to refactor this (noob) approach?coffeescript jQuery - 如何重构这个(菜鸟)方法?
【发布时间】:2013-05-17 09:05:46
【问题描述】:

在开始学习一些编码之后,我在 rails4 应用程序中使用引导程序进行了这个(非常丑陋,非 DRY)星级切换。我已经完成了代码学校的咖啡脚本教程,但似乎 ruby​​ 对我来说更容易学习。

如果有人能提供一些“专业人士”如何编写此函数的提示? 非常感谢。

@starSwitch =  ->
    label_1 = $("label#1")
    label_2 = $("label#2")
    label_3 = $("label#3")
    label_4 = $("label#4")
    label_5 = $("label#5")

    label_1.click ->
            label_1.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_2.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")
            label_3.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")
            label_4.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")
            label_5.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")

    label_2.click ->
            label_1.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_2.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_3.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")
            label_4.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")
            label_5.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")

    label_3.click ->
            label_1.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_2.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_3.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_4.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")
            label_5.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")

    label_4.click ->
            label_1.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_2.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_3.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_4.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_5.children("i").addClass("icon-star-empty").removeClass("icon-star colorfull")

    label_5.click ->
            label_1.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_2.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_3.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_4.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")
            label_5.children("i").addClass("icon-star colorfull").removeClass("icon-star-empty")

$ -> starSwitch

【问题讨论】:

    标签: javascript ruby-on-rails coffeescript refactoring switch-statement


    【解决方案1】:

    你可以这样做:

    @starSwitch =  ->
      $("label").click ->
        $("label").addClass("icon-star colorfull").removeClass("icon-star-empty")
        $(this).nextAll("label").addClass("icon-star-empty").removeClass("icon-star colorfull")
    

    如果页面上有其他标签,请在星标签中添加一个类(例如stars),然后将代码更改为$("label.stars").clicknextAll("label.stars")

    【讨论】:

    • 太棒了!谢谢!我从你的回答中学到了更多,而不仅仅是这个功能有多干燥!因为我使用了很棒的字体: $("label.rating").children("i").removeClass("icon-star-empty").addClass("icon-star colourll")
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2010-09-19
    • 2011-02-18
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多