Ember.js 为什么余烬是通过引用而不是通过值设置的?

Ember.js 为什么余烬是通过引用而不是通过值设置的?,ember.js,set,Ember.js,Set,在Ember(1.0.0rc6)中遇到了一个奇怪的行为,我希望有人能解释一下。在map循环中,我最初编写了@set('selected_date_range',date_range),假设date_range的副本将存储在selected_date_range中。然而,情况并非如此。相反,存储了对date\u range的引用,以便在未找到匹配项时执行代码时,原始date\u range将被“自定义”日期范围覆盖 selectDateRange: (date_range_value) ->

在Ember(1.0.0rc6)中遇到了一个奇怪的行为,我希望有人能解释一下。在map循环中,我最初编写了
@set('selected_date_range',date_range)
,假设
date_range
的副本将存储在
selected_date_range
中。然而,情况并非如此。相反,存储了对
date\u range
的引用,以便在未找到匹配项时执行代码时,原始
date\u range
将被“自定义”日期范围覆盖

 selectDateRange: (date_range_value) ->
    # determine if passed in date range is in supported date range array
    isSupported = @get('supported_date_ranges').map((date_range) =>
      supported = if date_range_value is date_range.value
        # date_range must be copied otherwise future changes to
        # selected_date_range will modify the supported_date_ranges array. wtf.
        @set('selected_date_range', Ember.copy(date_range))
        true
      else
        false
      return supported
    ).reduce (memo, next) -> memo or next
    # date range value is not in supported array so it is custom
    unless isSupported
      @set('selected_date_range.value', date_range_value)
      @set('selected_date_range.title', 'Custom')
      @set('selected_date_range.name', 'custom')
为什么要按引用设置余烬(本质上是创建一个计算的别名),而不是按值设置

这只是一个猜测:

@set('selected_date_range', Ember.copy(date_range, true))

这将创建
date\u范围
对象的深度副本。

对不起,我发布的代码可以正常工作。当我第一次尝试
@set('selected_date_range',date_range)
时,它被破坏了,它似乎应该将
selected_date_range
设置为
date_range
的副本,而不是指向
date_range
的指针。