【问题标题】:How to add a new computed field into knockout view model如何将新的计算域添加到淘汰视图模型中
【发布时间】:2013-11-12 12:33:49
【问题描述】:

我正在尝试计算视图模型中的第三个字段。我知道这不是方法,而只是给出以下 sn-p 示例。 请帮忙

$.ajax({
    type: "GET",
    url: '/ASPNET/GetGroups',
    dataType: "json",
    success: function (data) {
        var viewModel = {
            advisorGroup: ko.observableArray(data)
        };
        viewModel.advisorGroup.label = ko.computed(function () {
            return self.code + ' (' + self.cls+')';
        });
        alert(JSON.stringify(viewModel));
        ko.applyBindings(viewModel);
    }
})


<input type="checkbox" data-bind="attr: { value: code, id: code }" name="GroupsSel" checked="checked">
<label data-bind="attr: { for: code }, text: label "></label>

【问题讨论】:

  • 所以你想添加另一个计算的 observable 到 viewModel 变量?它应该与您已有的标签字段相似。

标签: knockout.js viewmodel code-snippets


【解决方案1】:

试试这个。

success: function (data) {
    ko.utils.arrayForEach(data, function(item){
        item.label = ko.computed(function () {
            return item.code + ' (' + item.cls + ')';
        });
    });
    //..........
}

小提琴:http://jsfiddle.net/8WqQu/1/

或者正如安德斯所说,你可以简单地这样做。

success: function (data) {
    ko.utils.arrayForEach(data, function(item){
        item.label = item.code + ' (' + item.cls + ')';
    });
    //..........
}

小提琴:http://jsfiddle.net/8WqQu/2/

【讨论】:

  • 如果 item.code 不能变异(不可观察),则不需要计算 jsfiddle.net/8WqQu/2
  • 真的。但它只是对 JavaScript 对象的属性操作。 :)
  • 这里完全有效,不需要添加计算值,因为计算值不能作用于未观察值的值变化
  • 是的。我希望做这样的事情。 fun2code.blogspot.in/2013/11/…
猜你喜欢
  • 1970-01-01
  • 2019-02-05
  • 2015-07-07
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多