淘汰赛如何设置可观察儿童的价值

格雷格

我正在尝试使用模板来实现内联编辑。在我的视图模型上,我有一个方法:self.changeMode。我是通过按钮单击事件(模板内部)触发此事件的。传递给changeMode函数的data参数包含预期的数据,但我需要更改可观察的数据。我该怎么做呢?

var MyViewModel = function (data) {
    var self = this;

    self.managingAgentId = ko.observable(data.managingAgentId);
    self.companyName = ko.observable(data.companyName);
    self.companyNumber = ko.observable(data.companyNumber);
    self.isActive = ko.observable(data.isActive);
    self.agents = ko.observableArray(data.agents);
    
    // Change to Edit or Display mode
    self.changeMode = function (data,event) {
        event.preventDefault();
        // => need to change mode here!
    };
}


$(function () {

        $.ajax({
            type: "GET",
            url: ma.Urls.LoadManagingAgent
        }).done(function (result) {
            $.each(result.agents, function (index, element) {
                element.mode = "display";
            });
            
            ko.applyBindings(new MyViewModel(result));
        }).error(function (response) {
            addMessage(response);
        });
    });
<script type="text/html" id="display">
    <td data-bind="text: managingAgentMemberId"></td>
    <td data-bind="text: applicationUser.userName"></td>
    <td data-bind="text: applicationUser.email"></td>
    <td data-bind="text: applicationUser.emailConfirmed"></td>
    <td data-bind="text: isActive"></td>
    <td>
        <button class="btn btn-success btn-sm" data-bind="click:$root.changeMode">
            <i class="fa fa-edit"></i>
            Edit
        </button>
    </td>
</script>

<script type="text/html" id="edit">
    <td data-bind="text: managingAgentMemberId"></td>
    <td data-bind="text: applicationUser.userName"></td>
    <td data-bind="text: applicationUser.email"></td>
    <td data-bind="text: applicationUser.emailConfirmed"></td>
    <td><input type="checkbox" data-bind="checked: isActive" /> </td>
    <td>
        <button class="btn btn-success btn-sm kout-update">
            <i class="fa fa-save"></i>
            Update
        </button>
        <button class="btn btn-danger btn-sm kout-cancel">
            <i class="fa fa-stop"></i>
            Cancel
        </button>
    </td>
</script>

在此处输入图片说明

托玛拉克

规范的解决方案:

function Child(data) {
    var self = this;
    self.name = ko.observable();
    self.mode = ko.observable('display');
    ko.mapping.fromJS(data, Child.mapping, self);
}
Child.prototype.toggleMode = function () {
    this.mode(this.mode() === 'display' ? 'edit' : 'display');
};
Child.mapping = {
    // mapping rules, if applicable
};
function Parent(data) {
    var self = this;
    self.children = ko.observableArray();
    ko.mapping.fromJS(data, Parent.mapping, self);
}
Parent.mapping = {
    children: {
        create: function (options) {
            return new Child(options.data);
        }
    }
};

ko.applyBindings(new Parent({
    children: [
        {name: 'Child 1'}, {name: 'Child 2'}, {name: 'Child 3'}
    ]
}));
td:first-child {
    width: 200px;
}
button {
    width: 6em;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>

<table>
    <tbody data-bind="foreach: children">
        <tr data-bind="template: mode"></tr>
    </tbody>
</table>

<script type="text/html" id="display">
    <td data-bind="text: name"></td>
    <td>
        <button data-bind="click: toggleMode">Edit</button>
    </td>
</script>

<script type="text/html" id="edit">
    <td><input data-bind="value: name"></td>
    <td>
        <button data-bind="click: toggleMode">Save</button>
    </td>
</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

淘汰赛可观察到的最新价值

来自分类Dev

淘汰赛:链接可观察的数组

来自分类Dev

淘汰赛:更改可观察值

来自分类Dev

当儿童可观察到的更新时,淘汰赛js css似乎没有重新计算

来自分类Dev

设置新值时,淘汰赛力量将可观察的事件通知订户

来自分类Dev

淘汰赛可观察的订阅多次触发

来自分类Dev

淘汰赛:找出计算出的可观察触发

来自分类Dev

淘汰赛计算可观察到的参数

来自分类Dev

淘汰赛可观察到的表演

来自分类Dev

淘汰赛移除率从可观察到的限制

来自分类Dev

淘汰赛订阅可观察的复杂对象的任何更改

来自分类Dev

无法在淘汰赛js中获得可观察的数据

来自分类Dev

带有字符的淘汰赛追加可观察对象

来自分类Dev

淘汰赛可观察的订阅多次触发

来自分类Dev

可观察到淘汰赛更新

来自分类Dev

淘汰赛JS和可观察的单选按钮

来自分类Dev

在淘汰赛中对可观察的列表进行排序

来自分类Dev

淘汰赛:可观察输入数组的 observableArray

来自分类Dev

分配时淘汰赛可观察数组被覆盖

来自分类Dev

淘汰赛-添加时如何使模板输入与可观察数组保持同步?

来自分类Dev

淘汰赛:如何编程可观察数组元素之间的相互依赖性

来自分类Dev

淘汰赛-如何使用新值重置动态可观察数组

来自分类Dev

更新扩展程序中可观察到的淘汰赛js时如何保留光标位置

来自分类Dev

是否让淘汰赛计算对象订阅不在初始执行路径中的可观察对象?

来自分类Dev

是否可以在D3中使用淘汰赛可观察对象

来自分类Dev

淘汰赛-添加了可观察到的不更新新对象的功能

来自分类Dev

淘汰赛可观察到的数组,更改事件获得更新的项目值

来自分类Dev

淘汰赛:通过代码手动更新可观察对象?

来自分类Dev

为什么我无法在淘汰赛中将数据合并到可观察数组

Related 相关文章

  1. 1

    淘汰赛可观察到的最新价值

  2. 2

    淘汰赛:链接可观察的数组

  3. 3

    淘汰赛:更改可观察值

  4. 4

    当儿童可观察到的更新时,淘汰赛js css似乎没有重新计算

  5. 5

    设置新值时,淘汰赛力量将可观察的事件通知订户

  6. 6

    淘汰赛可观察的订阅多次触发

  7. 7

    淘汰赛:找出计算出的可观察触发

  8. 8

    淘汰赛计算可观察到的参数

  9. 9

    淘汰赛可观察到的表演

  10. 10

    淘汰赛移除率从可观察到的限制

  11. 11

    淘汰赛订阅可观察的复杂对象的任何更改

  12. 12

    无法在淘汰赛js中获得可观察的数据

  13. 13

    带有字符的淘汰赛追加可观察对象

  14. 14

    淘汰赛可观察的订阅多次触发

  15. 15

    可观察到淘汰赛更新

  16. 16

    淘汰赛JS和可观察的单选按钮

  17. 17

    在淘汰赛中对可观察的列表进行排序

  18. 18

    淘汰赛:可观察输入数组的 observableArray

  19. 19

    分配时淘汰赛可观察数组被覆盖

  20. 20

    淘汰赛-添加时如何使模板输入与可观察数组保持同步?

  21. 21

    淘汰赛:如何编程可观察数组元素之间的相互依赖性

  22. 22

    淘汰赛-如何使用新值重置动态可观察数组

  23. 23

    更新扩展程序中可观察到的淘汰赛js时如何保留光标位置

  24. 24

    是否让淘汰赛计算对象订阅不在初始执行路径中的可观察对象?

  25. 25

    是否可以在D3中使用淘汰赛可观察对象

  26. 26

    淘汰赛-添加了可观察到的不更新新对象的功能

  27. 27

    淘汰赛可观察到的数组,更改事件获得更新的项目值

  28. 28

    淘汰赛:通过代码手动更新可观察对象?

  29. 29

    为什么我无法在淘汰赛中将数据合并到可观察数组

热门标签

归档