【发布时间】:2012-01-24 15:32:52
【问题描述】:
我正在尝试设置可以根据数据类型在编辑和只读模式之间切换的通用 Knockout 模板。如果您曾经使用过 ASP.NET 的动态数据:就像他们的字段模板一样。例如:
<script type="text/html" id="text">
<!-- ko if: $root.editable -->
<input type="text" data-bind="value: $data" />
<!-- /ko -->
<!-- ko ifnot: $root.editable -->
<span data-bind="text: $data"></span>
<!-- /ko -->
</script>
这样使用:
<label><input type="checkbox" data-bind="checked: editable" /> Editable</label>
<p>Name: <input data-bind="value: name" /></p>
<p>Name2: <span data-bind="template: { name: 'text', data: name }"></span></p>
使用以下视图模型:
var viewModel = {
name: ko.observable("Brian"),
editable: ko.observable(true)
};
我们的想法是能够像“Name2”示例中那样在字段级别使用模板,而不是显式的元素/控件。这允许整个表单在编辑和阅读模式之间轻松切换,而无需大量重复的标记。这也允许重复使用常见的数据类型编辑/显示标记,例如对日期字段使用日期选择器等。
问题
模板内的$data 伪变量没有双向绑定。它会在 observable 中反映当前值,但输入控件的变化不会设置该值。
如何在$data 上进行双向绑定?
【问题讨论】:
标签: knockout.js knockout-templating