选择optionstext后出现绑定错误

时间:2013-04-30 21:55:48

标签: knockout.js

这是一个下拉列表和另一个检查绑定的元素:

<select data-bind = 
    "options: chains,
    optionsText: function (item) { return item.BusinessModel['Name'] },
    optionsCaption: 'Select...', 
    value: selectedChain">
</select>
<div data-bind = "text: selectedChain().Id"></div>

viewModel和初始化如下所示:

function ViewModel() {
    this.chains = null;
    this.selectedChain = ko.observable();
}

$.ajax({
    url: "@Url.Action("Chains", "GetAll")",
    success: function (result) {
        var model = new ViewModel();
        model.chains = result;
        model.selectedChain(result[0]); // Why?
        ko.applyBindings(model);
    }
});

在组合框中选择optionsCaption(“选择... ”)后,绑定的工作时间不会更长(不会重置参考中的旧值/新值集)元件)。这就是我需要初始化selectedChain的原因。 它让我觉得将null设置为selectedValue会出现问题?!

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:3)

您的第二个绑定text: selectedChain().Id有问题 - 如果您选择“选择...”选项,则selectedChain的值未定义,您无法执行.Id未定义。您需要添加一个检查,例如:

<!-- ko if: selectedChain -->
    <div data-bind="text: selectedChain().Id"></div>
<!-- /ko -->

或:

<div data-bind="text: selectedChain() && selectedChain().Id"></div>

示例:http://jsfiddle.net/FLD2V/