Подтвердить что ты не робот

Наблюдайте за неэмберными глобалами

Я хочу, чтобы вычисленное свойство наблюдало глобальный неэмбер: конкретный ключ в localStorage. Это возможно? Не похоже, чтобы это сократилось:

someProperty:function(){
    //some functionality
}.property('localStorage.someKey')

Можно ли делать то, что я пытаюсь сделать напрямую?

4b9b3361

Ответ 1

В общем, вы можете наблюдать обычные объекты JavaScript просто отлично. Вам просто нужно использовать Ember.get и Ember.set, чтобы изменить их:

var pojo = {};

var MyObject = Ember.Object.extend({
  bigEyeballs: function() {
    var O_O = this.get('pojo.O_O');
    if (O_O) { return O_O.toUpperCase(); }
  }.property('pojo.O_O')
});

var obj = MyObject.create({ pojo: pojo });
console.log(obj.get('bigEyeballs'));

Ember.set(pojo, 'O_O', "wat");
console.log(obj.get('bigEyeballs'));

Вы можете видеть, что это работает в этом JSBin.

Локальное хранилище - это немного другое дело, поскольку он не действительно обычный объект JavaScript. Вы можете создать небольшую обертку Ember вокруг локального хранилища и использовать ее для наблюдения:

var LocalStorage = Ember.Object.extend({
  unknownProperty: function(key) {
    return localStorage[key];
  },

  setUnknownProperty: function(key, value) {
    localStorage[key] = value;
    this.notifyPropertyChange(key);
    return value;
  }
});

var storage = new LocalStorage();

var MyObject = Ember.Object.extend({
  bigEyeballs: function() {
    var O_O = this.get('pojo.O_O');
    if (O_O) { return O_O.toUpperCase(); }
  }.property('pojo.O_O')
});

var obj = MyObject.create({ pojo: storage });

console.log(obj.get('bigEyeballs'));

Ember.set(storage, 'O_O', "wat");
console.log(obj.get('bigEyeballs'));

Вы можете видеть это в прямом эфире на JSBin.

В обоих случаях важно, чтобы вам нужно было использовать настройку Ember и получать, чтобы наблюдать за этими свойствами.