javascript - Ember.compulated.apply() 共享 getter/setter

标签 javascript ember.js

从 Ember 1.12 开始,以下代码块生成 deprecation warning因为鼓励使用不同的 getter 和 setter 的变化。我理解这个概念,但我不确定如何重构使用 Ember.compulated.apply() 的内容,以解决这些弃用警告。

var args = this.constructor.primaryKeys.concat(function(_, setValue) {
  var keyNames = this.constructor.primaryKeys;
  if (setValue === undefined) {
    var key, value;
    for (var i = 0; i < keyNames.length; i++) {
      key   = keyNames[i];
      value = this.get(key);

      if (!Ember.isNone(value)) {
        return value;
      }
    }
  } else {
    if (this.get('primaryKey') !== setValue) {
      this.set(keyNames[0], setValue);
    }
    return setValue;
  }
});
var primaryKey = Ember.computed.apply(Ember, args);

Twiddle demonstrating the problem

最佳答案

解决方案:

    var keyNames = this.constructor.primaryKeys;
    var args = this.constructor.primaryKeys.concat({
      get: function() {
        var key, value;
        for (var i = 0; i < keyNames.length; i++) {
          key   = keyNames[i];
          value = this.get(key);

          if (!Ember.isNone(value)) {
            return value;
          }
        }
      },
      set: function(key, _, setValue) {
        if (this.get('primaryKey') !== setValue) {
          this.set(keyNames[0], setValue);
        }
        return setValue;
      }
    });
    var primaryKey = Ember.computed.apply(Ember, args);
    Ember.defineProperty(this, 'primaryKey', primaryKey);

关于javascript - Ember.compulated.apply() 共享 getter/setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952986/

相关文章:

css - 如何将 bind-attr 类附加到 Ember 中的初始类?

javascript - 是否可以通过一个按钮清除表单并重置(重新加载)页面?

javascript - 将变量从内容脚本传递到弹出窗口

javascript - 为什么我在异步加载 Google map 时收到 'google is not defined'?

javascript - 谷歌浏览器 chrome.usb/chrome.hid 锁定设备

ember.js - 将 disqus 与 emberjs 集成仅适用于第一页加载

javascript - D3 圆包布局中沿圆圈的文本

ember.js - 如何使用 Bower 安装 highcharts

javascript - 在对象创建时动态创建绑定(bind) - 可能吗?

javascript - 按模型中的类别过滤每个项目 - ember.js