qooxdoo:增强属性以区分0和-0

时间:2016-06-07 14:04:22

标签: qooxdoo

是否有可能"覆盖"生成的属性设置者的等式检查? 我喜欢有一个可以区分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);

当我&#34;补丁&#34;通过替换&#34; qx.core.Property&#34;等代码来对框架中的等式检查(__emitXxx&#39; if (a===b)方法)进行检查。用&#34; if(Object.is(a,b))&#34; [1] 它起作用,
......但如果有更好的清洁方式,那就太好了。

也许这是一个功能请求? 对于属性定义属性,例如&#34;比较&#34; (功能)或&#34; altCheck&#34; (布尔型)?

  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-Script 6

2 个答案:

答案 0 :(得分:0)

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

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

获得qooxdoo所需功能的最佳方法是创建一个实现该功能的拉取请求,同时进行单元测试。

答案 1 :(得分:0)

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

出了什么问题?

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