【问题标题】:Modify Validate Observable of editable table in KnockoutJS修改 KnockoutJS 中可编辑表的 Validate Observable
【发布时间】:2014-08-02 12:43:43
【问题描述】:

我实际上是在做我的可编辑网格项目,我的数据来自 JSON 并解析为字典以具有键和值并显示在表格上。

我还有一列有 3 个链接,修改、验证和取消。

但是,输入标签中的值,经过用户编辑后,无法更新为标签标签。

 <table class="table table-hover">
                        <tbody data-bind="foreach: $root.testParams(parameters())">
                            <tr class="data-hover">
                                <td>
                                    <strong>
                                        <span id="key_params" data-bind="text:$data.key" />
                                    </strong>
                                </td>
                                <td>
                                    @*display label and input for dictionary<value>*@

                                    <input type="text" class="edit" data-bind="value:value,visible:$root.isItemEditing($data)" />
                                    <label class="read" data-bind="text:value,visible:!$root.isItemEditing($data)" />        

                                </td>
                                <td>
                                    <a href="#" class="action" data-bind="click: $root.editData.bind($root),visible:!$root.isItemEditing($data)">
                                        <i class="glyphicon glyphicon-edit"></i>&nbsp;Modify
                                    </a>

                                    <a  class="action" href="#" data-bind="click: $root.applyData.bind($root),visible:$root.isItemEditing($data)">

                                        <i class="glyphicon glyphicon-remove-circle"></i>&nbsp;Validate
                                    </a>

                                    <a class="action" href="#" data-bind="click: $root.cancelData.bind($root),visible:$root.isItemEditing($data)">
                                        <i class="glyphicon glyphicon-remove-circle"></i>&nbsp;Cancel
                                    </a>
                                </td>
                            </tr>
                        </tbody>
                   </table>

config.js

function ConfigurationViewModel() {
    var self = this;
    self.testParams = mapDictionaryToArray;
    self.value = ko.observable();

    self.parameters = ko.observableArray();
    self.editingItem = ko.observable();
    self.isItemEditing = function (datum) {
        return datum == self.editingItem();
    };

    self.editData = function (datu) {
        if (self.editingItem() == null) {
            self.editingItem(datu);
        }
    };

    self.applyData = function () {

        self.editingItem(null);
    };


    self.cancelData = function () {
        self.editingItem(null);
    };
};
$(document).ready(function () {
    ko.applyBindings(new RateScreenerConfigurationViewModel());
});  
bus.js
var mapDictionaryToArray =

    function (dictionary) {
        var result = [];
        dictionary = JSON.parse(dictionary);
        for (var key in dictionary) {
            if (dictionary.hasOwnProperty(key)) {
                result.push({
                    key: key,
                    value: dictionary[key]
                });
            }
        }
        return result;

    };

【问题讨论】:

  • 能否请您说明实际问题?并让我们知道您遇到了什么错误或什么不起作用。
  • @PatrickSteele :如上所述,我的问题是输入标签在可见绑定的编辑中可见,然后我在输入标签中输入一个新值,单击验证,但标签标签没有得到输入标签中输入的新值的更新

标签: c# html json knockout.js


【解决方案1】:

第一个问题是 value 需要是一个 observable ,这样当它在文本框中被修改时,标签也会被更新。

接下来是 isEditing 需要是一个 observable 以便它可以从编辑模式切换到显示模式。

result.push({
             key: key,
             value: ko.observable(dictionary[key]),
             isEditing: ko.observable(false)
           });

<input data-bind="value:value,visible:isEditing()"  />
<label data-bind="text:value,visible:!isEditing()" />

最后一个问题是点击功能无效,甚至没有添加到模型中。

edit: function (item) {
    item.isEditing(true);
},
cancel: function (item) {
    item.isEditing(false);
}

<a href="#" data-bind="click: $root.edit">Edit</a> 
<a href="#" data-bind="">Apply</a>
<a href="#" data-bind="click: $root.cancel">Cancel</a>

http://jsfiddle.net/Wdj6X/

【讨论】:

  • 感谢您的回答,我使用该功能是因为我无法控制的数据是 JSON 格式,我想将其转换为字典键和值。我能问你为什么要返回新的对象视图模型
  • @TrangZinita 我正在更新它,因为我为数组中的对象创建了一个新函数。还有其他方法可以做到这一点,但如果我想为对象添加更多功能,它会提供更大的灵活性。这个名字很差,因为我不知道里面有什么。如果您查看此处的第 2 步,它会执行相同的操作:learn.knockoutjs.com/#/?tutorial=loadingsaving 第 2 步。
  • 为了根据文本输入更新标签,它需要是可观察的
  • 感谢您的回答,如果我有 Fidder 中的文件,它也对我有用,但是当我将它们分成 3 个文件时,即 biz.js、config.js 和 cshtml 文件,当我为数据绑定设置可见时,foreach 只循环一次,请你看看这个记事本:notepad.cc/share/62xVGi2Yob
  • 您缺少 viewModel 中的参数观察者
猜你喜欢
  • 2014-12-03
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2014-10-23
  • 2018-07-01
  • 1970-01-01
相关资源
最近更新 更多