javascript - 使用 Ember.js 捕获代码错误的更好实践(特别是困惑的变量名称)

标签 javascript ember.js ember-data

在 Ember.js 中,我们使用 Ember 自己的对象变体,建议/必须使用 this.getthis.set 来访问对象属性。

我(大部分)理解为什么要这样做,并且欣赏它为 Ember 编程体验带来的一致性和灵 active ,但我确实觉得我失去了 IDE 的健全性检查。

使用 Jetbrain 产品(或任何具有深入分析和完成功能的优秀 IDE),我通常可以依靠符号建议来确保选择正确的变量名称。用 ember 输入字符串依赖于我来正确命名,而我是一个容易犯错的人。

我对可能的解决方案有一些想法。

  • 一些 IDE 插件可以进行静态分析以建议使用正确的字符串
  • ES6 或替代的 transpired 语言,默认以 ember 方式访问成员
  • 在需要的地方自动建立字符串常量的某种方法
  • 一些 ember 调试设置,如果我尝试获取尚 undefined variable ,它至少会引发警告。
  • 如果 ember 发现我试图将属性设置为未定义,我还发现抛出警告很有用。

希望有人能告诉我这些解决方案之一存在,已经想到了更好的方法,或者我的问题并不是真正的问题。

(一个例子来说明我的问题:) 在下面的代码片段中

  const email = this.get('email');

  const newInvitation = this.store.createRecord('invitation', {email: email});

我正在尝试获取属性email,但我想要获取的真实属性称为emailAddress。当我创建记录时,我使用未定义的电子邮件字段来执行此操作,直到稍后在代码中才会捕获该字段。

调试并不可怕,但如果每次我拼写错误时都必须手动筛选每一行代码,我将浪费大量时间并成为一个可悲的调试男孩。救命!

最佳答案

目前我们还没有好的解决方案。然而, future 看起来是光明的!

目前 ember-typings 正在进行大量工作。存储库来构建 typescript 定义,该定义将允许 typescript 语言服务器为您提供完成。这将为您提供诸如 this.get('foo') 之类的内容的补全,但在不久的将来不会为诸如 this.get('foo.bar') 之类的内容提供补全。

我还构建了 this ,这将允许您在支持 proxy object 的浏览器上省略 .get.set 。然而,这更多的是一个概念验证,而不是您应该在生产中使用的东西!

如果您只想在访问空属性时调试消息,则可以使用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 脚本。我尝试了一下,但是基本上没有人用,也没有任何支持。

关于javascript - 使用 Ember.js 捕获代码错误的更好实践(特别是困惑的变量名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46018439/

相关文章:

Javascript:在数组中设置一个值会将所有其他值设置为该值

javascript - Ember.js 中 `this` 的基本使用

javascript - ember-data 悲惨错误重复记录

javascript - DS.ManyArray 的 Ember.js 大小

javascript - jquery中添加类后触发事件

javascript - 使用 `getElementsByTagName` 获取单个元素

coffeescript - 在coffeescript中的函数末尾添加函数调用

json - Ember 数据和映射 JSON 对象

javascript - QuerySelectorAll 样式颜色

javascript - 模板仅在刷新页面后呈现