【问题标题】:Avoiding magic string for property when creating computed observable using defineProperty使用 defineProperty 创建计算的 observable 时避免属性的魔法字符串
【发布时间】:2014-07-18 22:52:32
【问题描述】:

享受我的公共属性现在默认可观察的事实。我从文档中看到您创建一个计算使用

observable.defineProperty(viewModel, 'fullName', function(){
  return this.firstName + ' ' + this.lastName;
});

要在 typescript 中执行此操作(如果 Rob 有更好的方法,请纠正我),我去:

import obs = require('plugins/observable'); 

class Upload {

public enableUpload: boolean = false;


constructor() {
    obs.defineProperty(this, 'enableUpload', {
        read: () => {
            var result = this.fileExists && this.createAs;
            return result;
        }
    });
}

我唯一不喜欢的是属性作为字符串传递给defineProperty 函数的事实。有什么办法吗?

干杯

杰里米

【问题讨论】:

    标签: typescript durandal


    【解决方案1】:

    我认为您使用的是 Durandal API?

    documentation 表示属性名称是一个字符串。

    observable.defineProperty

    使用 ES5 getter 和 setter 定义计算属性。参数

    • obj : Object 要在其上创建属性的目标对象。
    • 属性名:字符串 要定义的属性的名称。
    • 评估器或选项:函数|对象 Knockout 计算函数或计算选项对象。

    返回 KnockoutObservable :底层计算的 observable。

    【讨论】:

      【解决方案2】:

      得到了答案(感谢 Rob Eisenberg):

      从 v2.1 开始,Durandal 可观察插件将包装 getter。所以代替上面的代码,我可以使用

      获得打字稿的全部好处
      get enableUpload(): boolean {
          return this.fileExists && this.createAs != null;;
      }
      

      Durandal 使它成为一个计算的 observable。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 2012-06-21
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多