データテーブルの並べ替えボタンをビルドしているうちに、これが表示されました。私は、各ソート・ボタンを、DESC(ソート・ダウン)とASC(ソート・アップ)と非アクティブ(デフォルトのソート)の間で切り替えたいと思っていました。Javascriptオブジェクトの割り当てgottcha
だから私は、1つのプログラムが進行し、1だからあなたはそれがすべてのように動作していることがわかります値
var model = {
order: {
field: 'creationDate',
direction: 'DESC'
},
orderDefault: {
field: 'creationDate',
direction: 'DESC'
}
}
$('button').click(function() {
if (model.order.field == "creationDate") {
model.order.field = 'newField'
} else if (model.order.direction == 'DESC') {
model.order.direction = 'ASC'
} else {
// This casuses the orderDefault object to be a clone of the order object
// so assignment of values in model.order are refelected in model.orderDefault GOTCHA!!!!
model.order = model.orderDefault
}
$('#result').html('field:' + model.order.field + " direction:" + model.order.direction);
}
)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<button class="btn btn-primary">
click me
</button>
<div id="result">
</div>
これは、オブジェクトがJavaScriptで参照によって割り当てられている、つまり割り当て時にコピーされないためです。私が知る限り、普及しているプログラミング言語の中では非常に一般的な動作です。 –