【发布时间】:2013-12-22 16:46:27
【问题描述】:
假设我的主视图包含
- 可预订项目
- 购物车
两个元素在同一个页面中,每个元素都有自己的虚拟机,如下所示:
<div id='page'>
<div id='item'>
<span data-bind='text: item().name'></span>
<span data-bind='text: item().price'></span> EUR
<!-- What to bind on this click handler? -->
<button>Add</button>
</div>
<hr>
<div id='cart'>
You have 0 items in your cart.
</div>
</div>
Javascript
function ItemVM() {
var self = this;
self.item = ko.observable({id: 1, name:'test', price: 3.99});
}
function CartVM() {
var self = this;
// Adds an item to cart.
self.add = function(item) {
// Business logic here
}
// And so on, other methods here.
self.remove = function(item) {}
self.checkout = function() {}
}
ko.applyBindings(new ItemVM(), document.getElementById('item'));
ko.applyBindings(new CartVM(), document.getElementById('cart'));
我有 2 个问题。
1) 如何在“项目”上下文中使用在其他地方定义的点击处理程序?也就是说,如何让按钮使用 CartVM.add() 作为点击处理程序?
2) 关于 KO 或 MVVM 本身,我做错了什么吗?
【问题讨论】: