javascript - 只读的 Ember 计算属性应该在 YUIdoc 中标记为 @property 还是 @method?

标签 javascript ember.js documentation ember-cli yuidoc

<分区>

应该如何在 YUIdoc 中记录只读计算属性(例如,Ember.js 模型)?

假设我有一个简单的模型:

/**
 * Person model
 * @class Person
 * @extends Ember.Object
 * @constructor
 */
Person = Ember.Object.extend({
  /**
   * @property firstName
   * @type String
   */
  firstName: null,

  /**
   * @property lastName
   * @type String
   */
  lastName: null,

  /**
   * ? what goes here?
   */
  fullName: Ember.computed('firstName', 'lastName', function() {
    return `${this.get('firstName')} ${this.get('lastName')}`;
  })
});

fullName 应该标记成什么?

它是一个@property吗?如果是这样,是否应该将其标记为 @readOnly?我可以从两个方面来看待它——因为它没有 setter 函数,所以它是一个只读属性。另一方面,它派生自可编辑/可设置的属性,因此它可以随着用户操作而改变。

还是@method?因为它不仅使用了其他属性,而且实际上对它们进行了转换?在这样一个简单的示例中,转换部分并不那么明显,但是假设一个计算属性类似于 nameInitials,它只返回名字和姓氏的第一个字母等?

另外:我对 Ember 属性使用 @property 标签而不是 @attribute 标签是否正确?

最佳答案

TL;DR:我认为你应该使用这个模板:

@property name
@type {type}
@public/@private

按照 Gaurav 的建议,如果您使用 .readOnly()computed.readOnly()@,请添加 @readOnly default 如果它有默认值(不是 nullundefined)。

解释:

至于@method 问题:不,请不要!从您对象的消费者的 Angular 来看它(这就是您的 API 文档的基本目的)。您不能像调用方法那样调用 object.property()。但只要您使用 Ember 的 getter 和 setter(您应该始终这样做),CP 的行为就与静态属性完全一样。它的值不是 Ember.ComputedProperty 实例,而是该实例返回的值。因此,无论是 CP 还是静态属性对消费者来说都是完全透明的,而且应该始终如此,因此您可以随时将静态属性更改为计算属性,反之亦然,而不会破坏任何东西!

并尝试始终指定访问关键字,例如 @public@private,因为这有助于定义和推断您的“事物”的公共(public) API。假设您的组件的消费者只能使用公共(public)属性/方法,也只有那些应该接受单元或组件集成测试,同时您保留随时更改私有(private)内容的自由,只要公共(public) API不会改变。

不要使用@final关键字。那里的文档可能有点误导,但是 final 是其他(经典的面向对象)语言中非常常见的关键字,它表示您可能不会覆盖此属性/方法在 child 类。所以除非是这种情况,否则不要使用它。

关于javascript - 只读的 Ember 计算属性应该在 YUIdoc 中标记为 @property 还是 @method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769563/

相关文章:

javascript - 在 React 中滚动到可滚动 div 的底部

sorting - Emberjs 高级排序 hasMany 关联作为计算属性

ember.js - 将 CoffeeScript 与 ember 的 Mixins 一起使用的正确方法是什么?

javascript - 我如何在 Ember 中创建部分?

user-interface - LLDB 的 GUI 文档

javascript - 有没有办法在 JS 文档中定义泛型类型?

javascript - ExternalInterface.call 有效,但 javascript 无法访问 actionscript 回调?

javascript - 对YouTube视频禁用iOS视频控件

javascript - 全局常量可以在 JavaScript 中声明吗?

macos - 如何使用 Doxygen 为 Dash 指定关键字?