如何设置javascript代码以避免关闭括号瀑布?

时间:2014-05-14 08:08:27

标签: javascript coding-style

以下代码示例(取自AngularJS ui-router wiki)说明了我的问题。

angular.module('myApp', ['ui.router', 'ui.router.stateHelper'])
  .config(function(stateHelperProvider){
    stateHelperProvider.setNestedState({
      name: 'root',
      templateUrl: 'root.html',
      children: [
        {
          name: 'contacts',
          templateUrl: 'contacts.html',
          children: [
            {
              name: 'list',
              templateUrl: 'contacts.list.html'
            }
          ]
        },
        {
          name: 'products',
          templateUrl: 'products.html',
          children: [
            {
              name: 'list',
              templateUrl: 'products.list.html'
            }
          ]
        }
      ]
    });
  });

具体来说,这些行:

            }
          ]
        }
      ]
    });
  });

我发现这非常难看。有没有办法避免这些?

注意:我意识到CoffeeScript可以提供一些帮助,但我主要对使用Javascript可以做些什么感兴趣。

3 个答案:

答案 0 :(得分:3)

总是分而治之:

function appropriateNameHere(stateHelperProvider) {
    var contacts, products, state;

    contacts = {
        name: 'contacts',
        templateUrl: 'contacts.html',
        children: [{
            name: 'list',
            templateUrl: 'contacts.list.html'
        }]
    };
    products = {
        name: 'products',
        templateUrl: 'products.html',
        children: [{
            name: 'list',
            templateUrl: 'products.list.html'
        }]
    };
    state = {
        name: 'root',
        templateUrl: 'root.html',
        children: [contacts, products]
    };
    stateHelperProvider.setNestedState(state);
}
angular.module(
    'myApp',
    ['ui.router', 'ui.router.stateHelper']
  ).config(appropriateNameHere);

你画线的地方几乎完全是主观的/基于意见的。有些人会按原样使用你的代码,其他人会觉得它需要比我上面做的更精细。但这是应用您的意见时使用的基本技术。 : - )

答案 1 :(得分:1)

您可以创建函数,而不是使用匿名函数。 您也可以使用变量而不是直接传递数据。

答案 2 :(得分:0)

  

有没有办法避免这些?

您可以尝试Coffeescript,在那里写下

angular.module("myApp", [
  "ui.router"
  "ui.router.stateHelper"
]).config (stateHelperProvider) ->
  stateHelperProvider.setNestedState
    name: "root"
    templateUrl: "root.html"
    children: [
      {
        name: "contacts"
        templateUrl: "contacts.html"
        children: [
          name: "list"
          templateUrl: "contacts.list.html"
        ]
      }
      {
        name: "products"
        templateUrl: "products.html"
        children: [
          name: "list"
          templateUrl: "products.list.html"
        ]
      }
    ]

但不,一般情况下你无法避免它们。