2016-06-07 65 views
1

是否有可能「覆蓋」生成的屬性設置器的相等性檢查? 我喜歡有一個(整數)屬性,可以區分0(零)-0(負零)。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); 

當我 「補丁」 在框架內平等的檢查( qx.core.Property__emitXxx方法)通過替換代碼如「if (a===b)」與「if(Object.is(a,b))[1]它的工作,
...但它會如果有更好的更乾淨的方式,那就好了。

也許這是功能要求? 對於像「比較」(函數)或「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

+0

這看起來像一個功能要求:) ......你能請報告給https://github.com/qooxdoo/qooxdoo/issues ......也爲討論的策略來解決這個問題,請加入我們的https: //gitter.im/qooxdoo/qooxdoo –

回答

0

作爲的Qooxdoo不提供定義自定義值比較器的功能,請在GitHub的問題跟蹤打開的問題在https://github.com/qooxdoo/qooxdoo/

我認爲有一個比較屬性,它允許定義自定義比較的想法是一個好主意。如果省略compare屬性,則應使用默認比較器。

得到你需要進入的的Qooxdoo功能的最好的方法是創建一個實現該功能拉入請求,伴隨單元測試。

0

我複製你上面提到的代碼,發現「changeValue」事件只發生一次,而不是3倍!我使用Qooxdoo Playground v5.0.1,Firefox 47.0,Win7。

怎麼了?

您可以通過qooxdoo財產transform鍵,保存數據的字符串,而不是一個整數解決問題。

+0

我犯同樣的錯誤 - 在OP *希望* +0和-0之間的區分,但該框架不 – johnspackman

+0

哦,我明白了。我相信可以在不更改qooxdoo的屬性系統的情況下解決問題。沒有必要修改框架,以便能夠在+ 0/-0之間完全剔除。 –