模板中的ObservableArray在创建后不应用可见绑定

时间:2011-10-11 20:05:23

标签: jquery knockout.js

无论出于何种原因,只要GroupType选择列表发生变化,我就无法通过敲除来触发可见的更新。我在下面有一个简短的例子:

<script id="process" type="text/x-jquery-tmpl">
    <select data-bind="value: GroupType">
        <option value="0">example 0</option>
        <option value="1">example 1</option>
        <option value="2">example 2</option>
        <option value="3">example 3</option>
    </select>
    <select data-bind="value: Group, visible: GroupType() == '2'">
        <option value="1">option 1</option>
        <option value="2">option 2</option>
    </select>
    <input type="text" data-bind="value: Group, visible: GroupType() != '2'"/>
</script>

<div data-bind="template { name: 'process', foreach: Processes }"></div>

<script type="text/javascript">
    var viewModel = {
        Processes: ko.observableArray([
            { GroupType: ko.observable("1"), Group: ko.observable("Blah") },
            { GroupType: ko.observable("2"), Group: ko.observable("1") }
        ])
    };

    ko.applyBindings(viewModel);
</script>

编辑1:我已经包含了下面建议的更改,但不是允许切换这两个项目,而是只显示最后一个项目而不管选定的GroupType

编辑2:我为此制作了一个jsFiddle:http://jsfiddle.net/2jjgH/

编辑3(最终):编辑已在上面进行,以反映以下答案。

1 个答案:

答案 0 :(得分:1)

observableArrays仅通知对阵列本身的更改(添加项目,删除项目,替换整个阵列)。它们不跟踪各个属性。您需要制作GroupTypeGroup observables才能在您的方案中更新用户界面。