淘汰无线电组内的foreach绑定工作只有一种方式

时间:2012-12-18 14:02:52

标签: knockout.js

我正在使用Knockout JavaScript库v2.2.0rc。

我想知道,是否有可能做到以下几点。

我的模板看起来像这样

<script type="text/html" id="@Html.UniqueId("WorkflowRulesDisplay_template")">
<div data-bind ="foreach: items">
    <fieldset>
        <legend>
            <span data-bind="text: StName"/>
        </legend>
        <dl class="row">
            <dt class="label">
                <label>Member Type:</label>
            </dt>
            <dd class="field">
                <div><input type="radio" value = "User" data-bind="attr :{name:'@Html.UniqueId("wf_usr_radio_grp_")' + StId, checked: CheckedUsr}"/>User</div>
                <div><input type="radio" value = "Group" data-bind="attr :{name:'@Html.UniqueId("wf_usr_radio_grp_")' + StId, checked: CheckedGrp}" />Group</div>
            </dd>
        </dl>
        <dl class="row">
            <dt class="label">
                <label>Description:</label>
            </dt>
            <dd class="field">
                <textarea rows ="5" cols="20" class ="textbox simple-text" data-bind="value: Description"></textarea>
            </dd>
        </dl>
    </fieldset>
</div>

我的viewmodel和init代码如下所示:

this._items = ko.observableArray(workflow.data('workflow_list_data'));
var viewModel = { items: this._items};
ko.applyBindingsToNode(this._containerElem.get(0), { template: { name:workflow.attr('id').replace('_workflow_control', '_template') } }, viewModel);

其中workflow.data('workflow_list_data')是

data.Select(x => new { StName = x.StatusType != null ? x.StatusType.Name : string.Empty, StId = x.SuccessorStatusId, CheckedGrp = !x.GroupId.HasValue, CheckedUsr = !x.UserId.HasValue, x.UserId, x.GroupId, x.Description });

,所以客户端,我有这个:[Object {StName =“lala”,StId = 123,CheckedGrp = false,CheckedUsr = true,Description =“lala”} .... {...}]

这一切都很好,但收音机组。更改所选按钮永远不会更改视图模型。我已经尝试过检查和attr-value绑定 - 都是一样的。

1 个答案:

答案 0 :(得分:0)

问题是CheckedUsrCheckedGroup不是可观察的 而不是

this._items = ko.observableArray(workflow.data('workflow_list_data'));

尝试

this._items = ko.mapping.fromJS(workflow.data);
// not sure what worflow.data is at this point?

这应该从您的数据创建一个observableArray,其属性设置为ko.observable