【发布时间】:2015-11-15 18:51:03
【问题描述】:
我尝试在按钮上使用 foreach 数据绑定。由于基础拆分按钮,我尝试为每条记录生成的按钮都有自己的选项列表。 问题是内部 ul 没有访问绑定的正确项目。
我写了一个小例子程序来说明这个问题:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Try</title>
<link rel="stylesheet" href="css/foundation.css" />
<script src="js/vendor/modernizr.js"></script>
</head>
<body>
<script src="js/vendor/jquery.js"></script>
<script src="js/foundation.min.js"></script>
<h4 class="">persons</h4>
<ul data-bind="foreach: { data: persons, as: 'person' }" class="inline-list">
<li>
<a class="small success round button split" data-bind="click: $parent.presentPerson"><h2 data-bind="text: person.name"></h2> <span data-dropdown="drop"></span></a><br>
<ul id="drop" class="f-dropdown" data-dropdown-content>
<li><a data-bind="click: $parent.removePerson">Remove</a></li>
</ul>
</li>
</ul>
<script type='text/javascript' src='js/knockout-3.4.0rc.js'></script>
<script type="text/javascript">
// Init foundation
$(document).foundation();
// This is a simple *viewmodel* - Java0Script that defines the data and behavior of your UI
function AppViewModel() {
var self = this;
self.persons = ko.observableArray([
{ name: 'Bert', age: 30, hobbies :["music","computers"] },
{ name: 'Charles', age : 31, hobbies :["sports"] },
{ name: 'Denise', age: 32 , hobbies :["art", "fashion", "games"]}
]);
self.removePerson = function() {
self.persons.remove(this);
};
self.presentPerson = function () {
var person = this;
window.alert(person.name + " " + person.age);
};
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
</script>
</body>
</html>
当单击按钮本身时,人对象是正确的,单击箭头并选择删除将导致始终删除最后一个对象,而不是选择的对象。
【问题讨论】:
-
我尝试设置一个示例,但无法理解错误。你能不能解释一下:jsfiddle.net/Salmin/ez7bfmg9
-
您还需要 zurb 基础库,所以这个例子可以工作。问题是单击每个按钮都可以正常工作,但单击向下箭头并随后删除,始终删除最后一项而不是单击的那个。
-
在尝试重现您的小提琴上的问题失败后,我注意到该问题仅出现在基础库中。
-
这是一个演示问题的小提琴:jsfiddle.net/6d5jnL3r
标签: javascript html knockout.js data-binding zurb-foundation