1

我正在尝试按照文档其他答案中的建议使用多个视图模型。

我在控制台中收到一个错误,抱怨未定义变量:

未捕获的 ReferenceError:无法处理绑定“foreach:函数(){return seals}”消息:未定义密封件

在线复制

HTML

<!-- ko foreach: seals -->
<div class="form-group">
    <label for="seal" class="col-xs-2 control-label" data-bind="text: 'Seal ' + name"></label>
    <div class="col-xs-8">
        <input type="text" class="form-control" data-bind="attr: {name: 'seal' + formName}" />
    </div>
</div>
<!-- /ko -->

JS

ko.applyBindings(demo, document.body);
ko.applyBindings(addEquipmentModel, document.getElementById('whatever'));
4

2 回答 2

2

问题在这里:

ko.applyBindings(demo, document.body);

您正在将模型应用于document.body,因此它将尝试解析和绑定整个文档。当它到达部分时:

<!-- ko foreach: seals -->

demo由于模型没有seals属性,您会收到错误消息。

实际上,您不希望绑定的元素重叠。换句话说,不要将一个模型绑定到绑定到另一个模型的元素的子元素。他们应该是兄弟姐妹,或者堂兄弟。不是直系后代。

于 2015-06-30T15:53:06.150 回答
1

如果您需要在视图中嵌套多个视图模型,甚至在子父关系中,您应该考虑为此使用 Knockout 组件。除此之外的另一种可能性是apply(this)在您的主视图模型中使用其他视图模型“类”,以便您的主视图模型继承所引用模型的功能和属性。但是,如果您的视图模型中有名称并发,这将导致问题。

于 2015-06-30T16:42:59.317 回答