我在处理选择更改时遇到了困难,就像在跨度/按钮/淘汰赛中所做的任何事情上的“点击”处理程序中的构建一样。简单的场景,当当前选定的项目发生变化时,我想调用一个函数来引用 foreach 中的相应项目:
<ul id="storeList" data-bind="foreach: $data">
<li>
<span data-bind="text: StaticName, click: $root.storeModel.editStore"></span>
</li>
</ul>
在 editStore 中,store 是对完整当前 store 对象的引用:
p.editStore = function(store, event) {
location.hash = 'Butiker/Edit/' + ko.utils.unwrapObservable(store.StoreId);
var el = event.target;
p.currentEditItem(store);
p.currentEditElement(el);
}
现在我想用一个选择来代替:
<select data-bind="options: $data, optionsText: 'StaticName', optionsValue: 'StoreId', optionsCaption: 'Choose store', event : { change: $root.storeModel.editStore }"></select>
这可行,但在 editStore 函数中,没有任何内容作为第一个参数传递。
我可以在选择上做 value: currentEditItem,但是当该 observable 的数据更新时,我想做额外的事情。我不能订阅它,因为那只会给我那个特定属性的新字符串值……而不是对象本身。
为什么 click 必须给我我需要的一切,而 select change 让我处理我感兴趣的对象的一小部分?