更改javascript对象中的类参数

时间:2014-10-13 21:54:51

标签: javascript ruby-on-rails coffeescript

我使用Chris McCord的这个奇妙的宝石,Sync

我的项目工作正常,除了与职位有关的小问题。

在我有的宝石的coffeescript文件中

class Sync.PartialCreator

  attributes:
    name: null
    resourceName: null
    authToken: null
    channel: null
    selector: null
    direction: 'append'
    refetch: false

  constructor: (attributes = {}) ->
    @[key] = attributes[key] ? defaultValue for key, defaultValue of @attributes
    @$el = $("[data-sync-id='#{@selector}']")
    @adapter = Sync.adapter 

我需要改变从追加到前置的方向。 有没有办法改变这个,或者我必须分叉宝石?

1 个答案:

答案 0 :(得分:0)

有很多方法可以更改默认值。

  1. 在创建对象时提供属性值,构造函数参数中的attributes = {}专门用于此:

    o = new Sync.PartialCreator(direction: 'prepend')
    
  2. 修改默认值的子类:

    class Pancakes extends Sync.PartialCreator
      attributes:
        name: null
        resourceName: null
        authToken: null
        channel: null
        selector: null
        direction: 'prepend'
        refetch: false
    o = new Pancakes
    

    你必须在这里提供整件事。如果您有$.extend_.extend或类似内容,则可以说:

    class Pancakes extends Sync.PartialCreator
      attributes: _({}).extend(Sync.PartialCreator::attributes, direction: 'prepend')
    o = new Pancakes
    

    仅使用direction替换来制作副本。

  3. 子类并在构造函数中设置自己的direction

    class Pancakes extends Sync.PartialCreator
      constructor: (args...) ->
        super(args...)         # Pass all the arguments up to the Sync.PartialCreator
        @direction = 'prepend' # Force the direction
    o = new Pancakes
    

    或者只是摆弄所需的默认值:

    class Pancakes extends Sync.PartialCreator
      constructor: (args...) ->
        args[0] ?= { }
        args[0].direction ?= 'prepend' # Set the direction if one isn't supplied
        super(args...)                 # Punt to the base class.
    o = new Pancakes
    
  4. Monkey patch Sync.PartialCreator。加载 Sync.PartialCreator之后 之前尝试使用它,只需修补原型:

    Sync.PartialCreator::attributes = 'prepend'
    
  5. 您使用哪种方法取决于您的具体情况。

    演示:http://jsfiddle.net/ambiguous/sLnhpw3z/