如何为Knockout的observables设置初始值(用于级联<select>列表)?</select>

时间:2011-10-04 12:01:31

标签: asp.net-mvc knockout.js

我正在测试非常棒的Knockoutjs。我面临着一个特殊的问题。

我发现了一个类似的问题:Binding initial/default value of dropdown (select) list,但它没有帮助,因为我的是级联列表。

我使用来自服务器的数据,使我的initialModel如下所示。

var initialModel = @Html.Raw(JsonConvert.SerializeObject(Model)) ;

然后我按如下方式定义我的viewModel。

    var viewModel = {
    evaluationGroups :ko.observableArray(initialModel.EvaluationGroups),
    SelectedEvaluationArea:ko.observable(initialModel.selectedEvaluationArea ? initialModel.selectedEvaluationArea.Id :null ),
    SelectedEvaluationGroup :ko.observable(initialModel.selectedEvaluationGroup)
}

现在,我想要级联select列表。因此,我的约束力如下。

<fieldset>
            <legend>Evaluation Group and Area</legend>
            <p>
                <select id="EvaluationGroupId" name="EvaluationGroupId" data-bind='options: evaluationGroups, optionsText:"Title", value:SelectedEvaluationGroup,  optionsCaption: "Select Group..."'></select>
            </p>
             <p>
                <select id="EvaluationAreaId" name="EvaluationAreaId" data-bind='options: SelectedEvaluationGroup()? SelectedEvaluationGroup().EvaluationAreas:null,  optionsValue: "Id", optionsText:"Title", value:SelectedEvaluationArea,  optionsCaption: "Select Area..."'></select>
            </p>
            </fieldset>

问题是,我无法从服务器数据中提取初始值。如果我看到viewModel.SelectedEvaluationGroup的值,当页面刚刚加载时,默认值为undefined。但是,如果我看到initialModel.selectedEvaluationGroup,则它是完整对象,正如预期的那样。我究竟做错了什么?这不是初始化Knockout可观察量的正确方法吗?

1 个答案:

答案 0 :(得分:0)

也许您忘记运行applyBindings命令了?

ko.applyBindings(viewModel);

更新

我和你的jsfiddle打过一场比赛。似乎很高兴在手动设置为主数组中的初始值时绑定到初始值。

http://jsfiddle.net/ZMvNM/5/