2012-04-26 3 views
2

У меня есть простейшее свойство объекта Ember, для которого я хочу выполнить некоторые проверки значений, прежде чем устанавливать и запускать/отменять изменение. Мне не очень повезло найти образцы кода или информацию об этом. Узор Привык от других структур, чтобы сделать это в инкубаторе - что-то вроде:Как проверить значение перед установкой в ​​Ember?

в пределах объекта Ember

propertyName : function(key, value) { 
    // Setter 
    if (arguments !== 1) { 
     if (setCheckHere) { 
      return this._super(key, value); // ?? is this right? 
     } 
     // ?? if ignoring what should I return instead? 
    } 
}.property() 

У меня возникли проблемы выяснить, что методы, которые я должен звонить и что нужно вернуть.

+0

ваш вопрос в порядке, но th e название нет. «что является лучшим способом ...» обычно попадает в «неконкурентоспособный», потому что «вряд ли будет требовать мнения, дискуссии, аргументы, опрос или расширенное обсуждение», поэтому вы можете его изменить – ajax333221

+0

Шаблоны для работы Ember развиваются. Но все в порядке. – Kreegr

ответ

3

Мое предложение было бы следующее, см http://jsfiddle.net/pangratz666/NUTAz/:

Ember.Object.create({ 
    _foo: undefined, 
    foo: function(key, value) { 
     // david 
     if (arguments.length === 1) { 
      return this._foo; 
     } 

     // setter 
     if (value === 42) { 
      // set the value because it's cool 
      this._foo = value; 
     } 

     // allow chaining, so this.set('foo', 12).set('name', 'Fünke'); 
     return this; 
    }.property() 
}); 

UPDATE

даже лучшим решением было бы использовать замыкание, как следует @mraken см http://jsfiddle.net/pangratz666/Zacfh/:

Ember.Object.create({ 
    foo: (function() { 
     var _foo; 
     return function(key, value) { 
      // david 
      if (arguments.length === 1) { 
       return _foo; 
      } 

      // setter 
      if (value === 42) { 
       _foo = value; 
      } 

      return this; 
     }.property(); 
    })() 
}); 
+2

Как насчет инкапсуляции _foo внутри self-executing закрытия на foo: (function() {var _foo; return function (key, value) {...}})() – Kreegr

+1

Вы можете использовать третий аргумент в функции, которая кешированное значение. https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/tests/computed_test.js#L241 – Manoharan

Смежные вопросы