升级到1.0后,Observer不会触发

时间:2013-09-24 10:52:54

标签: ember.js

这是用于在升级到1.0之前工作的代码

Radium.AuthManager = Ember.Object.extend
  _token: null
  init: ->
    @_super.apply this, arguments
    @set('token', $.cookie('token'))

  token: ((key, value) ->
    if arguments.length == 2
      @set '_token', value
      return

    @get('_token')
  ).property('_token').volatile()

  setAjaxHeaders: ( ->
    if token = @get('_token')
      $.ajaxSetup
        headers:
          "X-User-Token": token
  ).observes('_token')

  tokenDidChange: ( ->
    token = @get('_token')

    return unless Ember.isEmpty(token)

    location.replace('http://blah')
  ).observes('token')

升级到1.0后,它不再有效。

观察员真的会被打破或者是否已经改变了?

1 个答案:

答案 0 :(得分:2)

以前的行为是set()中的init()电话会触发观察者;目前的行为是它不会。

在:

App.Person = Ember.Object.extend({
  init: function() {
    this.set('salutation', "Mr/Ms");
  },

  salutationDidChange: function() {
    // fired
  }.observes('salutation')
});

现在:

App.Person = Ember.Object.extend({
  init: function() {
    this.set('salutation', "Mr/Ms");
  },

  salutationDidChange: function() {
    // fired
  }.observes('salutation').on('init')
});

直接从release notes

获取的示例

只需将这些on('init')标记添加到您的观察者:

Radium.AuthManager = Ember.Object.extend
  # ...
  setAjaxHeaders: ( ->
    # ...
  ).observes('_token').on('init')

  tokenDidChange: ( ->
    # ...
  ).observes('token').on('init')