0

此代码在升级到 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 后,它不再工作。

观察者真的可以被打破还是改变了?

4

1 回答 1

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')
});

直接取自发行说明的示例。

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

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

  tokenDidChange: ( ->
    # ...
  ).observes('token').on('init')
于 2013-09-24T11:00:49.513 回答