Ember.js 为什么余烬是通过引用而不是通过值设置的?
在Ember(1.0.0rc6)中遇到了一个奇怪的行为,我希望有人能解释一下。在map循环中,我最初编写了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) ->
@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
的指针。