如何反向排列KnockoutJS数组项,以便它们按降序添加到屏幕顶部

热挖

需要将新项目添加到可观察数组中,但要将它们添加到列表的顶部,而不是此示例中的底部。有什么想法吗?尝试过.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);
朱Chu

调用reverse()可观察数组将在适当位置反转基础数组,并且不返回该数组。因此,绑定到其返回值不会产生任何结果。

要插入可观察数组的开头,请使用unshift()

您还$index用来显示正在渲染的数组项的索引。但是,由于您始终从头到尾遍历,因此始终会从0length - 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何按降序排列数组

如何將小計添加到 groupby 並按降序排列這些小計類別?

进行排列后,如何将它们添加到数组中?[Java]

如何将数组项添加到数组末尾?

如何按角度降序排列对象数组?

Unity - 如何将游戏对象添加到数组并附加 RigidBody2D 以便它们上下移动

如何将数组项添加到另一个数组中

如何将整数添加到二维数组项

如何将数组项添加到文档Firestore Flutter

在pymongo中将键/值对添加到数组项

将编号添加到重复的数组项

将数组项添加到 console.log

如何以编程方式将iAd标语添加到屏幕的顶部中心?

在屏幕顶部时,将类添加到元素

按降序排列数组中的奇数

按行将数据添加到数组

如何将4.0参考程序集添加到构建服务器(以便编译器找到它们)?

如何将新的过滤器字段添加到“按项目运行分配”屏幕

如何获取按DocumentID降序排列的文档?

我如何使用 qsort() 但按降序排列?

Swift - 如何创建 UITextField 数组并将它们添加到 UIView

如何动态地将项目添加到数组中并计算它们的出现?

将字符串按 160 个字符分组并将它们添加到数组列表中

将 EventListeners 添加到附加到数组项的多个按钮

如何将我的对象添加到列表中以随机选择它们以将其涂抹到屏幕上?

将条添加到反向CustomScrollView或ListView时,将粘性标头固定在顶部

按降序排列

按降序排列

SQLAlchemy按降序排列?