2

KnockoutjsとともにTwitterブートストラップを使用するASP.NetMVC4Webサイトがあります。要件の1つは、ユーザーがいくつかのオプションを切り替えたときにビューモデルを更新することです。これを行うために、次のラジオボタンを設定しました

<div id = "myradio" class="btn-group" data-toggle="buttons-radio">
  <button value="1" type="button" class="btn btn-primary active" data-bind="click: refresh">1</button>
  <button value="2" type="button" class="btn btn-primary" data-bind="click: refresh">2</button>
  <button value="3" type="button" class="btn btn-primary" data-bind="click: refresh">3</button>
</div>​

私のKnockoutjsビューモデルは

function ViewModel() {
    var self = this;

    //this function is called when the radio button is clicked
    self.refresh = function(){
    alert($('#myradio > button.active').val());
    };
}

私が抱えている問題は、クリックイベントの発生が早すぎて、現在の値ではなく、ラジオボタンの以前の値が表示されることです。この問題を実証するために、私はjsfiddleをセットアップしました

http://jsfiddle.net/73yMR/2/

現在の値を取得する方法はありますか?knockoutjsを使用すると、イベントを「更新」機能に渡すことができますか?更新機能の実行時にどのラジオオプションが選択されているかを検出できる限り、どのようなアイデアでも構いません。

4

1 に答える 1

3

Knockoutは、eventオブジェクトを2番目の引数(最初の引数は「現在のデータ」)としてclickハンドラー関数に渡します(これについて詳しくは、ドキュメントを参照してください) 。

したがって、次のコードは期待される結果を生成します。

self.refresh = function(data, element){
    alert($(element.currentTarget).val());
};

動作するJSFiddle

于 2012-12-12T17:53:30.430 に答える