2

我有一个使用 twitter bootstrap 和 Knockoutjs 的 ASP.Net MVC4 网站。要求之一是当用户在某些选项之间切换时刷新视图模型。为此,我设置了以下单选按钮

<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对象作为第二个参数(第一个参数是“当前数据”)传递给处理函数(您可以在文档click中阅读更多相关信息)

所以下面的代码会产生预期的结果:

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

一个工作的JSFiddle

于 2012-12-12T17:53:30.430 回答