使用 Ember.js 捕获代码错误的更好实践(具体来说,弄乱了变量名)
Better practices for catching code mistakes with Ember.js (specifically, messed up variable names)
在Ember.js中,我们使用Ember自己的对象变体,其中recommend/necessitate使用this.get
和this.set
来访问对象属性。
我(大部分)理解为什么这样做,并欣赏它为 Ember 编程体验增加的一致性和灵活性,但我确实觉得我失去了我的 IDE完整性检查。
使用 Jetbrain 产品(或任何好的 IDE w/深入分析和完成)我通常可以依靠符号建议来确保我选择了正确的变量名称。输入带有 ember 的字符串取决于我能否正确命名,我是一个容易犯错的人。
我对可能的解决方案有一些想法。
- 一些 IDE 插件进行静态分析以建议使用正确的字符串
- 一种 ES6 或替代的公开语言,默认以 ember 方式访问 member
- 在我需要的地方自动建立字符串常量的一些方法
- 一些 ember 调试设置,如果我尝试获取尚未定义的变量,它至少会引发警告。
- 如果 ember 发现我试图将属性设置为未定义,我也会发现发出警告很有用。
希望有人会告诉我存在这些解决方案之一,已经想到了更好的方法,或者我的问题并不是真正的问题。
(一个例子来说明我的问题:)
在以下片段中
const email = this.get('email');
const newInvitation = this.store.createRecord('invitation', {email: email});
我正在尝试获取属性 email
,但我想要获取的真实属性名为 emailAddress
。当我创建记录时,我使用了一个未定义的电子邮件字段,直到稍后在代码中才被捕获。
调试并不可怕,但如果我每次拼错某些东西时都必须手动筛选每一行代码,我会浪费很多时间并且成为一个可悲的调试男孩。求助!
目前我们没有很好的解决方案。然而前途一片光明!
目前,ember-typings
存储库中正在进行大量工作,以构建一个 typescript 定义,该定义将允许 typescript 语言服务器为您提供完成。这将使您完成 this.get('foo')
之类的事情,但不会在不久的将来完成 this.get('foo.bar')
之类的事情。
我也构建了 this, which will allow you to omit .get
and .set
on browsers that support the proxy object。然而,这更像是一个概念验证,而不是您应该在生产中使用的东西!
如果你只是想要调试消息,如果你访问一个 属性 那是空的,你可以使用 unknownProperty
:
unknownProperty(key) {
console.log('access to unknown property');
}
但是我有时需要访问一个未知的 属性 代码如下:
if(!obj.get('foo')) {
obj.set('foo', 'bar');
}
总的来说,我建议您尝试使用 typescript,因为这可能是一种解决方案,可以很快为您提供良好的开发人员体验,并获得社区的良好支持。 ES classes RFC 也很有趣,它表明 ember 趋向于标准 ES 类 并且在某些时候我们根本不会 .set
和 .get
。
glimmer 集成也在向前发展,在 glimmer 组件中你将不需要 .set
和 .get
.
另外我不推荐你 ember 脚本。试过了,基本没人用,根本不支持
在Ember.js中,我们使用Ember自己的对象变体,其中recommend/necessitate使用this.get
和this.set
来访问对象属性。
我(大部分)理解为什么这样做,并欣赏它为 Ember 编程体验增加的一致性和灵活性,但我确实觉得我失去了我的 IDE完整性检查。
使用 Jetbrain 产品(或任何好的 IDE w/深入分析和完成)我通常可以依靠符号建议来确保我选择了正确的变量名称。输入带有 ember 的字符串取决于我能否正确命名,我是一个容易犯错的人。
我对可能的解决方案有一些想法。
- 一些 IDE 插件进行静态分析以建议使用正确的字符串
- 一种 ES6 或替代的公开语言,默认以 ember 方式访问 member
- 在我需要的地方自动建立字符串常量的一些方法
- 一些 ember 调试设置,如果我尝试获取尚未定义的变量,它至少会引发警告。
- 如果 ember 发现我试图将属性设置为未定义,我也会发现发出警告很有用。
希望有人会告诉我存在这些解决方案之一,已经想到了更好的方法,或者我的问题并不是真正的问题。
(一个例子来说明我的问题:) 在以下片段中
const email = this.get('email');
const newInvitation = this.store.createRecord('invitation', {email: email});
我正在尝试获取属性 email
,但我想要获取的真实属性名为 emailAddress
。当我创建记录时,我使用了一个未定义的电子邮件字段,直到稍后在代码中才被捕获。
调试并不可怕,但如果我每次拼错某些东西时都必须手动筛选每一行代码,我会浪费很多时间并且成为一个可悲的调试男孩。求助!
目前我们没有很好的解决方案。然而前途一片光明!
目前,ember-typings
存储库中正在进行大量工作,以构建一个 typescript 定义,该定义将允许 typescript 语言服务器为您提供完成。这将使您完成 this.get('foo')
之类的事情,但不会在不久的将来完成 this.get('foo.bar')
之类的事情。
我也构建了 this, which will allow you to omit .get
and .set
on browsers that support the proxy object。然而,这更像是一个概念验证,而不是您应该在生产中使用的东西!
如果你只是想要调试消息,如果你访问一个 属性 那是空的,你可以使用 unknownProperty
:
unknownProperty(key) {
console.log('access to unknown property');
}
但是我有时需要访问一个未知的 属性 代码如下:
if(!obj.get('foo')) {
obj.set('foo', 'bar');
}
总的来说,我建议您尝试使用 typescript,因为这可能是一种解决方案,可以很快为您提供良好的开发人员体验,并获得社区的良好支持。 ES classes RFC 也很有趣,它表明 ember 趋向于标准 ES 类 并且在某些时候我们根本不会 .set
和 .get
。
glimmer 集成也在向前发展,在 glimmer 组件中你将不需要 .set
和 .get
.
另外我不推荐你 ember 脚本。试过了,基本没人用,根本不支持