【问题标题】:qooxdoo: Enhance property to distinguish 0 from -0qooxdoo:增强属性以区分 0 和 -0
【发布时间】:2016-10-07 11:44:45
【问题描述】:

是否有可能“覆盖”生成的属性设置器的相等性检查? 我喜欢有一个(整数)属性,可以区分 0(零)和 -0(负零)。

例如:

qx.Class.define("io.Dummy",
{
  extend : qx.core.Object,
  properties :
  {
    value : {
      check    : "Integer",
      nullable : true,
      init     : null,
      event    : "changeValue"
    }
  }
});

因此以下代码将触发 3 个事件(而不是仅 1 个):

  var dummy = new infodesk.Dummy();
  dummy.addListener("changeValue", function (e) {
    this.info("changed!");
  }, this);

  dummy.setValue(-0); // <= changed!
  dummy.setValue(-0);
  dummy.setValue(+0); // <= changed!
  dummy.setValue(+0);
  dummy.setValue(-0); // <= changed!
  dummy.setValue(-0);

当我通过将“if (a===b)”之类的代码替换为“if(Object.is(a,b))”[1]来“修补”框架中的相等检查(qx.core.Property 的 __emitXxx 方法)时> 它有效,
...但如果有更好、更干净的方式来做这件事,那就太好了。

也许这是一个功能请求? 对于像“compare”(函数)或“altCheck”(布尔)这样的属性定义属性?

  properties :
  {
    value : {
      check    : "Integer",
      nullable : true,
      init     : null,
      event    : "changeValue",
      altCheck : true // 'alternative check enabled'
      // rsp.:
      compare : function (a, b) { return Object.is(a, b); }
    }
  }

[1] ECMA 脚本 6

【问题讨论】:

标签: qooxdoo


【解决方案1】:

由于 qooxdoo 不提供定义自定义值比较器的功能,请在https://github.com/qooxdoo/qooxdoo/ 的 github 问题跟踪器上打开一个问题。

我认为拥有一个允许定义自定义比较器的比较属性的想法是个好主意。如果省略了 compare 属性,则应使用默认的比较器。

将所需功能导入 qooxdoo 的最佳方式是创建一个实现该功能的拉取请求,并附上单元测试。

【讨论】:

    【解决方案2】:

    我复制了你上面提到的代码,发现“changeValue”事件只发生了一次,而不是3次!我使用Qooxdoo Playground v5.0.1,Firefox 47.0,Win7。

    怎么了?

    您可以通过使用 qooxdoo 属性的transform 键来解决问题,将数据保存为字符串而不是整数。

    【讨论】:

    • 我犯了同样的错误 - OP 想要区分+0和-0,但框架没有
    • 哦,我明白了。我相信在不改变 qooxdoo 的属性系统的情况下可以解决问题。根本不需要修改框架来区分 +0/-0。
    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    相关资源
    最近更新 更多