0

我改变了方法,现在,我正确地选择了无线电值。

问题:初始化时选择了我的一个收音机(首先加载然后用户可以更改选择),但第一次没有选择收音机,如何正确初始化“已选择”?

@model Demo.Web.ViewModels.HomeViewModel
@{
   ViewBag.Title = "Two Page";
}
@using (Html.BeginForm("Index", "Two", FormMethod.Post, new Dictionary<string, object> { { "data-bind", "submit:onSubmit" } }))
{

<table>
    <tr>
        <td>
            <div data-bind="foreach: items">
                <input type="radio" name="items" data-bind="attr: { value: id }, checked: $root.selected" />
                <span data-bind="text: name"></span>
            </div>
            <div data-bind="text: selected">
            </div>
        </td>
    </tr>
</table>

<input type="submit" name="send" value="Send" />
}

<script type="text/javascript">
var viewModel = {
    items: [
    { "id": 1, "name": "one", "selected": false  },
    { "id": 2, "name": "two", "selected": true },
    { "id": 3, "name": "three", "selected": false }
],
selected: ko.observable(),

    onSubmit: function(){                

        var x = this.selected();

        }
    };     

$(function() {                        
        ko.applyBindings(viewModel);
    });

4

1 回答 1

0

当绑定到 type 的输入时,Knockoutradio中的checked绑定会尝试将输入的值写入绑定的任何值。这个想法是你所有的无线电都绑定到同一个可观察对象。

就像是:

var viewModel = {
    items: [
        { id: 1, name: "one"  },
        { id: 2, name: "two" },
        { id: 3, name: "three" }
    ],
    selected: ko.observable()
};

绑定到如下 UI:

<div data-bind="foreach: items">
    <input type="radio" name="items" data-bind="attr: { value: id }, checked: $root.selected" />
    <span data-bind="text: name"></span>
</div>

<div data-bind="text: selected"></div>

示例:http: //jsfiddle.net/rniemeyer/BbX4S/

所以,在你的情况下,你应该能够绑定你的收音机$root.IsSelected并使用它,而不是循环遍历这些项目。

初始化它时,您可能希望查看是否选中了任何按钮,然后IsSelected适当地填充根级别。

于 2012-09-03T18:59:52.920 回答