Web計算機を作成するためのJavaScriptフレームワーク

<p>先日、Web計算機を作成する必要がありました。 それは私が書いた最初の計算機ではなく、JavaScriptで計算のロジックをエンコードする記憶は、毎回、熱意をまったく加えませんでした。 明らかに、計算ロジック自体と各サイトの計算ロジックを計算機自体のコードとアルゴリズムから分離して、これを行う必要がありました(「ユーザーが選択した値を見て-コストを計算します」)。







<p>そのような場合に最初に頭に浮かぶのは、標準の配列またはオブジェクトの使用です。 しかし、このアプローチは重すぎます。 ハッシュを使用する方がはるかに便利ですが、JavaScriptでのハッシュのサポートは非​​常に限られています。 そのため、実用的なHashクラスを備えたPrototypeライブラリを使用し、計算機のロジックと計算ハッシュを含むフォームフィールドを記述することにしました。 これにより、電卓のコードを十分にシンプルにし(ここではリファクタリングのための幅広い分野を見ていますが)、拡張可能にしました。



var calculations = new Hash({})



function calcPrice() {

var f = document.forms['calculator']

var price = 0

calculations.each(function(pair) {

if(f[pair.key] == null){

alert(pair.key)

}

if(pair.value['fieldtype'] == 'counter' && f[pair.key].value.match(/^\d+$/)){

price += f[pair.key].value * pair.value['price']

}

if(pair.value['fieldtype'] == 'radio'){

val = getRadioValue(f[pair.key])

} else {

val = f[pair.key].value

}

if(pair.value['fieldtype'] == 'radio' || pair.value['fieldtype'] == 'select'){

if(val != 0){

price += pair.value['prices'][val]

}

}

})

$('pricevalue').innerHTML = price + ' .'

}








<p>ラジオボタンの値を取得するには、 getRadioValueヘルパー関数を使用します。



function getRadioValue(radio) {

for(i = 0; i < radio.length; i++){

if(radio[i].checked)

return radio[i].value

}

return 0;

}








<p> 計算ハッシュのキーはフォームフィールドの名前です。値は、このフィールドの価格を計算するためのルールを持つハッシュです。 各ルールには、フィールドのタイプを示すfieldtypeキーと、フィールドの処理方法(私の場合は価格と価格)を記述する他のキーが含まれています。 このアーキテクチャにより、必要に応じて、以前に作成したコードを上書きせずに、電卓の機能と複雑さを簡単に高めることができます。 3種類のフィールドを使用しました。</ p>



<p>さらに、 計算ハッシュのルールは、たとえばフォームのAJAX読み込み部分など、動的に変更できます。</ p>



カウンターフィールド



<p>数量が示されているテキストまたはその他のフィールド。 金額は、ユーザーが入力した数量に価格キーの値を掛けて計算されます。</ p>

calculations['units'] = $H({ fieldtype:'counter', price:5.50 })

<input type="text" value="2" name="counter">








フィールドを選択



複数のアイテムのリストを選択します。 各要素には、独自の英数字識別子と特定の値があります。 依存識別子—価格は価格ルールキーのハッシュによって指定されます。

calculations("color") = $H({ fieldtype:'select', prices:$H({white:20.95,red:49.55}) })

<select name="color">

<option value="white"></option>

<option value="red"></option>

</select>








電波場



選択と同じですが、ラジオボタンが選択に使用される点が異なります。

calculations("color") = $H({ fieldtype:'radio', prices:$H({white:20.95,red:49.55}) })

<input type="radio" name="color" value="white" />

<input type="radio" name="color" value="red" />







All Articles