让我们以购物车为例...
每次用户选择一个项目时,我们都会将其移动到购物车的一行。
/* would normally autoincrement */
var num = '1';
document.getElementById('cart').innerHTML = oldHTML +
"<div id='line" + num + "'>
<input type='text' data-bind='value: quantity'>
<input type='text' data-bind='value: price'>
<input type='text' data-bind='value: extendedPrice'>
</div>";`
var lineVM () {
var self = this;
self.quantity = ko.observable();
self.price = ko.observable();
self.extendedPrice = ko.computed(function () {return self.price() * self.quantity();});
}
ko.applyBindings(new lineVM(), document.getElementById('line' + num));
随着行的添加,我们有 line1、line2 等......
从文档:
或者,您可以传递第二个参数来定义要在文档的哪个部分搜索数据绑定属性。例如,ko.applyBindings(myViewModel, document.getElementById('someElementId'))。这将激活限制为 ID 为 someElementId 的元素及其后代,如果您希望拥有多个视图模型并将每个模型与页面的不同区域相关联,这将非常有用。
测试表明没有分离......如果我重用视图模型,然后添加另一行“空白”它之前的那一行。但是,对于不确定的行数,我需要相同的视图模型。我不想为每条潜在生产线创建 100 个视图模型,也不希望我的购物车因将拥有 101 件商品的客户而损坏。
那么,如果我有一个视图模型并希望将它与页面上的多个区域相关联怎么办?文档并没有真正说。我是不是做错了,我是在尝试做 Knockout 不允许的事情吗?
非常感谢您的帮助。