Knockout.js 敲除-模板何时重新呈现

Knockout.js 敲除-模板何时重新呈现,knockout.js,Knockout.js,我们有一个简单的模板,可以在可编辑和不可编辑之间切换。基本上,它只是隐藏输入字段并显示一个范围,或者相反 <script type="text/html" id="inputTextTemplate"> <input type="text" data-bind="value: field, visible: $data.isEdit" /> <span data-bind="text: field, visible: !$data.isEdit"&g

我们有一个简单的模板,可以在可编辑和不可编辑之间切换。基本上,它只是隐藏输入字段并显示一个范围,或者相反

<script type="text/html" id="inputTextTemplate">
    <input type="text" data-bind="value: field, visible: $data.isEdit" />
    <span data-bind="text: field, visible: !$data.isEdit"></span>
</script>

我们也有一些通过JQuery应用的样式,但问题是每次模板从可编辑和不可编辑切换时,它都会被重新渲染,这些样式都会消失

这里是问题的一个小插曲


为什么会这样?我们如何解决这个问题,使模板只呈现一次?

您的fiddle实际上没有通过jQuery应用任何样式,但我在使用时遇到了类似的问题

解决办法是不要这样做。考虑是否可以使用ViewModel中的可观察对象在模板中应用样式。否则,每次重新提交模板时都需要通过jQuery重新应用这些样式。


您可以执行以下操作:
HTML代码
我为这两个控件添加了css类,如
css:{first:$data.isEdit}
css:{second:!$data.isEdit}


请阅读

还有,这是


希望它能对您有所帮助。

看起来问题在于我发送的是一个值,而不是一个可观察值。若我制作一个可观察或计算的模板,那个么模板只渲染一次。 所以在调用模板之前

isEdit: isEdit() == 'true'
如果我创建一个计算

this.isEditable = ko.computed(function(){
    return self.isEdit() == 'true';
});
并称之为

isEdit: isEditable
它按预期工作


在我的示例中,它是一个字符串,因为单选按钮将其设置为“真”或“假”。如果我只返回self.isEdit()则“false”也将为true。感谢您提供的示例,但在这种情况下没有帮助。我应该详细说明一下这个问题。我们还做了一些事件连接、焦点、模糊、JQuery ui控件。。。这不能通过css来完成。
this.isEditable = ko.computed(function(){
    return self.isEdit() == 'true';
});
isEdit: isEditable