【问题标题】:Knockout Array buttons one FunctionKnockout Array 按键一功能
【发布时间】:2014-11-11 19:51:44
【问题描述】:

我已经开始学习 Knockout,但遇到了一些麻烦。我有可观察的数组,它有一些按钮。我需要: 示例:

  • 我单击第一个按钮“锁定”并看到第一个跨度“锁定”,隐藏第一个跨度“解锁”。这应该是一个“锁定”功能。
  • 我单击第一个按钮“解锁”并隐藏第一个跨度“锁定”,可见第一个跨度“解锁”。这应该是一个“解锁”功能。
  • 我单击第二个按钮“锁定”并看到第二个跨度“锁定”,隐藏第二个跨度“解锁”。这应该是一个“锁定”功能。

我不知道...怎么做?

请帮忙!

这是我的模型:

function newNames() {
    var self = this;

    self.btnClick = ko.observable(true);

    self.newName = ko.observable();

    self.names = ko.observableArray([
        {id: 1, name: 'Name1'},
        {id: 2, name: 'Name2'},
        {id: 3, name: 'Name3'}
    ]);

    self.lock = function () {
        self.btnClick(false);
    };

    self.unlock = function () {
        self.btnClick(true);
    };

    self.clickRename = function () {
        for (var i = 0; i < self.names().length; i++) {
            if (self.btnClick() == false) {
            } else {
                self.names.replace(self.names()[i], {
                    name: self.newName()
                });
            }
        }
    };
};
ko.applyBindings(new newNames());

这是html:

<div class="form-group">
<input type="text" class="form-control" data-bind="value: newName">

<button type="button" class="btn" data-bind="click: clickRename">
    RENAME
</button>

</div>


<div class="group" data-bind="foreach: names">

    <div class="form">
        <!-- hidden: $parent.btnClick() == false, visible: $parent.btnClick() == true
        $parent.btnClick() == false -->

        <span id="span1" data-bind="visible: $parent.btnClick">unlock</span>
        <span id="span2" data-bind="hidden: $parent.btnClick() == true, visible: $parent.btnClick() == false">lock</span>


<input type="text" class="form-control" data-bind="value: name">

<button type="button" class="btn" data-bind="click: $root.lock">
    LOCK
</button>

<button type="button" class="btn" data-bind="click: $root.unlock">
    UNLOCK
</button>

        </div>
</div>

【问题讨论】:

    标签: javascript html button knockout.js ko.observablearray


    【解决方案1】:

    你可以试试这个。 无论如何,您可以改进代码,在带有按钮标签的对象数组上添加计算属性。

    我已将值传递给单击按钮,在该按钮设置相应的新属性 lock 并因此显示/隐藏相应的跨度。

    <div class="form-group">
                <input type="text" class="form-control" data-bind="value: newName">
                <button type="button" class="btn" data-bind="click: clickRename">    RENAME   </button>
            </div>
    
    
            <div class="group" data-bind="foreach: names">
    
                <div class="form">
                    <span id="span1" data-bind="visible: lock() == true">unlock</span>
                    <span id="span2" data-bind="visible: lock() == false">lock</span>
    
    
                    <input type="text" class="form-control" data-bind="value: name">
    
                    <button type="button" class="btn" data-bind="click: function(data, event) { $parent.lock(!lock(), data, event); }">
                        <span data-bind="visible: lock() == false">LOCK</span>
                        <span data-bind="visible: lock() == true">UN-LOCK</span>
    
                    </button>
    
    
                </div>
            </div>
            <script>
    
    
    
    
                function newNames() {
                    var self = this;
    
                    self.btnClick = ko.observable(true);
    
                    self.newName = ko.observable();
    
                    self.names = ko.observableArray([
                         { id: 1, name: 'Name1', lock: ko.observable(false) },
                         { id: 2, name: 'Name2', lock: ko.observable(false) },
                         { id: 3, name: 'Name3', lock: ko.observable(false) }
                     ]);
    
                    self.lock = function (value, data, event) {
                        console.log(data);
                        data.lock(value);
                    };
    
                    self.clickRename = function () {
                        for (var i = 0; i < self.names().length; i++) {
                            if (self.btnClick() == false) {
                            } else {
                                self.names.replace(self.names()[i], {
                                    name: self.newName()
                                });
                            }
                        }
                    };
                };
                ko.applyBindings(new newNames());
            </script>
    

    【讨论】:

    • 好的。这很棒!但是如何制作 RENAME 按钮?
    • 示例: - 如果第一个 'lock' -> 不要重命名输入,也不要在数组 'Name1' 中重命名。 - 如果第二个“解锁”-> 重命名输入并在数组“Name2”中重命名。 - 等来自输入 div class="form-group" 的数据...感谢您之前的回答!
    • 不清楚,更好地解释你想要达到什么,用例子更新你的问题
    • 非常感谢你,马克斯!我理解并做到了!你很酷!
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 2011-04-03
    • 2019-08-05
    • 1970-01-01
    • 2021-05-15
    • 2013-04-22
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多