需要将新项目添加到可观察数组中,但要将它们添加到列表的顶部,而不是此示例中的底部。有什么想法吗?尝试过.reverse(),但显然存在动态创建和显示数组的问题...
http://jsfiddle.net/CSFuF/1/的.reverse()无法正常工作
不带.reverse()的http://jsfiddle.net/CSFuF/
<!-- End view/edit employees details -->
<ul data-bind="foreach: parents.reverse()">
<h3 data-bind="visible: $index() == 0">Parents</h3>
<!-- add / remove parent -->
<li>
<fieldset>
<h4 data-bind="text: $index()"></h4>
<p style="float: left">
<button data-bind='disable: !(children().length > 0), click: toggleChildren'><span data-bind="visible: toggle">-</span><span data-bind="visible: !toggle()">+</span>
</button>
<button data-bind='disable: !toggle(), click: addChild'>Add child (+)</button>
</p>
<!-- add remove child -->
<!-- ko if: toggle -->
<ul class="qtr" data-bind="foreach: children.reverse()">
<h4 data-bind="visible: $index() == 0">Children</h4>
<li>
<fieldset>
<h4 data-bind="text: $index()"></h4>
<button data-bind='click: removeChild'>Remove child (-)</button>
</fieldset>
</li>
</ul>
<!-- /ko -->
<p style="float: right">
<button data-bind='click: removeParent'>Remove parent (-)</button>
</p>
</fieldset>
</li>
</ul>
<p style="float: right">
<button data-bind='click: addParent'>Add parent (+)</button>
</p>
JS:
function Parent(children) {
var self = this;
//self.name = ko.observable(name);
self.toggle = ko.observable(true);
self.children = ko.observableArray(children);
self.addChild = function () {
self.children.push(new Child("", self));
}
self.removeParent = function (parent) {
vm.removeParent(self);
};
self.removeChild = function (child) {
self.children.remove(child);
}
self.toggleChildren = function () {
self.toggle(!self.toggle());
};
}
function Child(name, parent) {
var self = this;
self.parent = parent;
self.removeChild = function () {
self.parent.removeChild(self);
};
}
function ParentChildViewModel() {
var self = this;
self.parents = ko.observableArray([]);
self.addParent = function () {
self.parents.push(new Parent());
};
self.removeParent = function (parent) {
self.parents.remove(parent);
}
};
var vm = new ParentChildViewModel();
ko.applyBindings(vm);
调用reverse()
可观察数组将在适当位置反转基础数组,并且不返回该数组。因此,绑定到其返回值不会产生任何结果。
要插入可观察数组的开头,请使用unshift()
。
您还$index
用来显示正在渲染的数组项的索引。但是,由于您始终从头到尾遍历,因此始终会从0
到length - 1
。
这是的样子unshift()
。我添加了一个name
属性并在其中插入了一个计数器,以便您可以查看数组中项目的顺序...
的HTML
<!-- End view/edit employees details -->
<ul data-bind="foreach: parents">
<h3 data-bind="visible: $index == 0">Parents</h3>
<!-- add / remove parent -->
<li>
<fieldset>
<h4 data-bind="text: name"></h4>
<p style="float: left">
<button data-bind='disable: !(children().length > 0), click: toggleChildren'><span data-bind="visible: toggle">-</span><span data-bind="visible: !toggle()">+</span>
</button>
<button data-bind='disable: !toggle(), click: addChild'>Add child (+)</button>
</p>
<!-- add remove child -->
<!-- ko if: toggle -->
<ul class="qtr" data-bind="foreach: children">
<h4 data-bind="visible: $index == 0">Children</h4>
<li>
<fieldset>
<h4 data-bind="text: name"></h4>
<button data-bind='click: removeChild'>Remove child (-)</button>
</fieldset>
</li>
</ul>
<!-- /ko -->
<p style="float: right">
<button data-bind='click: removeParent'>Remove parent (-)</button>
</p>
</fieldset>
</li>
</ul>
<p style="float: right">
<button data-bind='click: addParent'>Add parent (+)</button>
</p>
的JavaScript
function Parent(name, children) {
var self = this;
self.name = name;
var childCount = 0;
//self.name = ko.observable(name);
self.toggle = ko.observable(true);
self.children = ko.observableArray(children);
self.addChild = function () {
self.children.unshift(new Child(++childCount, self));
}
self.removeParent = function (parent) {
vm.removeParent(self);
};
self.removeChild = function (child) {
self.children.remove(child);
}
self.toggleChildren = function () {
self.toggle(!self.toggle());
};
}
function Child(name, parent) {
var self = this;
self.parent = parent;
self.name = name;
self.removeChild = function () {
self.parent.removeChild(self);
};
}
function ParentChildViewModel() {
var self = this;
var parentCount = 0;
self.parents = ko.observableArray([]);
self.addParent = function () {
self.parents.unshift(new Parent(++parentCount));
};
self.removeParent = function (parent) {
self.parents.remove(parent);
}
};
var vm = new ParentChildViewModel();
ko.applyBindings(vm);
小提琴... http://jsfiddle.net/CSFuF/2/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句