2016-10-20 31 views
-2

我想基於if/else語句配置數據表按鈕的狀態。如何基於if/else語句定義對象屬性?

數據表按鈕對象:

buttons: [ 
     { 
      text: "button text", 
      action: function (e, dt, node, config) { 
       button_action(); 
      }, 
      enabled: function() { 
       if (column_exists) { 
        this.enabled = true 
       } else { 
        this.enabled = false 
       } 
      } 
     } 
    ] 

有了這個代碼,我的按鈕始終處於啓用狀態。我如何根據if/else語句正確設置enabled參數?

+1

這完全取決於如何調用'enabled'函數? – adeneo

+1

...以及'column_exists'的值。 – JJJ

+2

嘗試使用不同的變量名稱,因爲this.enabled將使用值true替換啓用的函數。如果這是它應該是的,使用一個IIFE從函數內部返回true或false。 – Shilly

回答

2

column_exists爲真時,您想要enabled爲真,反之亦然。

所以......

buttons: [ 
    { 
     text: "button text", 
     action: function (e, dt, node, config) { 
      button_action(); 
     }, 
     enabled: !!column_exists 
    } 
] 

!!純粹是一種預防措施。它將任何值轉換爲布爾值。如果column_exists已經是一個布爾值,那麼您不需要那個。


這就是說,以下是反模式。

if (somethingBoolean) { 
    someValue = true; 
} else { 
    someValue = false; 
} 

不這樣做。代替簡單地寫爲:

someValue = somethingBoolean; 

或通過雙重否定,脅迫的任何值轉換成布爾如上所示。

someValue = !!anyValue; 
+0

實際上,column_exists不是一個布爾值,而是一個對象。所以'''它工作正常。 – kaycee

+0

請注意,一個空對象'{}'是真的,所以'!! {}'給你'真'。你可能會也可能不想要,只是意識到這一點。 – Tomalak

1

你不想讓enabled作爲一個函數,而是一個布爾值。

對於這一點,你可以使用一個IIFE:

{ 
    enabled: (function() { 
     if (column_exists) { 
      return true 
     } else { 
      return false 
     } 
    }()) 
// ^^ 
} 

或根本就沒有使用的if-else語句,而是一個三元運算符:

{ 
    enabled: column_exists ? true : false 
} 

而你的情況還可以被簡化爲

{ 
    enabled: Boolean(column_exists) 
} 
+0

@Tomalak Ooops。謝謝,修復。 – Bergi