0

我正在将代码从 Ember 1.0.4 升级到 Ember 1.13。当我使用 ember 1.13 执行以下代码时,出现错误

title: Ember.computed('content.title', 'managedObject.isHome', 'managedObject.finalManagedObject', {
                set: function(name, value) {
                    this.set('content.title', value);
                },
                if (this.get('content.title') !== undefined) {
                    return title;
                }
                if (this.get('managedObject') == Core.rootNode) {
                    return "Home";
                }
                get: function() {
                  return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
                }
            }),

执行代码时出现以下错误。

Uncaught SyntaxError: Unexpected token this
4

3 回答 3

0

您正在使用一个对象来定义一个计算属性。该对象必须具有get并且可能具有set功能。两者都在场。但是您还有六个在对象定义中不是有效的语法。您正在尝试构造这样的对象:

{
  set: function(name, value) {
    this.set('content.title', value);
  },
  if (this.get('content.title') !== undefined) {
     return title;
  }
  if (this.get('managedObject') == RSuite.rootNode) {
    return "Home";
  }
  get: function() {
    return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
  }
}

该对象的有效部分是:

{
  set: function(name, value) {
    this.set('content.title', value);
  },
  get: function() {
    return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
  }
}

根据您的 babel 配置,您可能可以将其简化为:

{
  set(name, value) {
    this.set('content.title', value);
  },
  get() {
    return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
  }
}

我希望现在很清楚。这与从 Ember 1.0.4 升级到 Ember 1.13 无关。请记住,Ember 1.13 已经很老了。2.0 是三年多前发布的。因此,我强烈建议您继续迁移,直到您至少达到 2.18。

于 2019-03-14T13:33:58.373 回答
0

我通过使用以下代码得到了答案:

title: Ember.computed('content.title', 'managedObject', 'managedObject.label', 'managedObject.finalManagedObject.displayName', {
                set: function(titleKey, newTitle) {
                    this.set('content.title', newTitle);
                    if (newTitle !== undefined) {
                        return newTitle;
                    } else if (this.get('managedObject') === Core.rootNode) {
                        return 'Home';
                    }
                    return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
                },      
                get: function() {
                    var title = this.get('content.title');
                    if (title !== undefined) {
                        return title;
                    } else if (this.get('managedObject') === Core.rootNode) {
                        return 'Home';
                    }
                    return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
                }
            }),

感谢您的建议 Rinold Simon 和 jelhan。

于 2019-03-15T06:41:59.203 回答
-2

我认为this参考丢失了。尝试用以下代码替换您的代码,

title: Ember.computed('content.title', 'managedObject.isHome', 'managedObject.finalManagedObject', {
  set(name, value) {
    this.set('content.title', value);
  },
  get() {
    return this.get('managedObject.label') || this.get('managedObject.finalManagedObject.displayName');
  }      
  if (this.get('content.title') !== undefined) {
    return title;
  }
  if (this.get('managedObject') == RSuite.rootNode) {
    return "Home";
  }
}),
于 2019-03-14T12:07:50.120 回答