当我更改observableArray时,Knockoutjs没有更新我的UI

时间:2012-01-03 03:20:30

标签: javascript viewmodel knockout.js

这是我的模板:

<tr>
    <td>
        <table>
            <thead>
                <th>
                    <span>Option name:</span>
                </th>
            </thead>
            <tbody data-bind="template: {name: 'optionChoiceTemplate', foreach: choices, templateOptions:{choiceArray: choices} }"></tbody>
        </table>
        <button data-bind="click: function(){choices.push('');}">Add new</button>
    </td>
</tr>

但是当我点击&#34;添加新&#34;按钮,我的视图没有更新,以包含空字符串的新选项。我已经在调试器中检查过将空字符串添加到选项中,并且我确保选择是observableArray,还有什么可能出错?

2 个答案:

答案 0 :(得分:0)

我创建了一个小提琴,使用您的HTML显示项目列表,并允许用户以两种方式添加新项目。第一种方法是使用您创建的单击功能。第二种方法是使用点击绑定。

这应该回答你的问题。

http://jsfiddle.net/johnpapa/4PfUr/

答案 1 :(得分:0)

问题在于,当使用带有template绑定的foreach绑定的jQuery Templates插件时,空字符串将被视为空值并且不会呈现。

您可以通过使用对象{text: ''}和绑定text或者通过推送除空字符串之外的其他内容(如单个空格)来解决此问题。

或者,如果您能够移动到Knockout 2.0并使用本机模板,那么您的空字符串项目将正确呈现。