【发布时间】:2018-01-21 13:23:26
【问题描述】:
我对淘汰赛中的点击绑定有疑问。我几乎找到了解决方案,但仍然不是我想要的。我为两个列表使用模板(模板相同)。在列表中,我几乎没有具有相同绑定的元素,在开始时我可以单击任何按钮,但是当我单击某个元素时,我想阻止仅从一个列表中选择/单击其他项目的能力。示例将更好地解释: JS
function AppViewModel() {
var self = this;
self.people = ko.observableArray([
{ name: 'Bert', bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' },
{ name: 'Charles', bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' },
{ name: 'Denise', bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' }
]);
self.workers = ko.observableArray([
{ name: 'Bart', bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' },
{ name: 'Joey', bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' },
{ name: 'Daniel', bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' }
]);
self.checkVoice = function() {
console.log('test');
};
}
ko.applyBindings(new AppViewModel());
HTML
<h2>List one</h2>
<div data-bind="template: { name: 'person', data: people }"></div>
<h2>List two</h2>
<div data-bind="template: { name: 'person', data: workers }"></div>
<script type="text/html" id="person">
<!-- ko foreach: $data -->
<div data-bind="text: $data.name"></div>
<button data-bind="click: $root.checkVoice">like</button>
<button data-bind="click: $root.checkVoice">dislike</button>
<!-- /ko -->
</script>
我的目标是:当我单击“Bert”名称的“赞”按钮时,我想关闭单击此列表中的其他按钮的可能性,但我希望在第二个列表中具有完全相同的可能性。 仅使用一个模板可以做到这一点吗? 现在我有这样的东西:
data-bind="click: function(data, event, type) { if(buttonClickedObservable()) { $root.checkAvailability($data, event, 'standard'); } }"
这个解决方案还不错,但关闭了点击两个列表的可能性,而不仅仅是一个
【问题讨论】:
标签: javascript jquery knockout.js