KnockoutJS - 为JavaScript变量赋予Observable值

时间:2013-05-31 20:03:55

标签: javascript knockout.js

我试图看看是否可以将JavaScript变量分配给KO Observable的值。

原因是我想将它作为属性分配给jquery模块。

我知道我能做到:

    var viewModel = {
    firstName : ko.observable("Bert"),
    lastName : ko.observable("Smith"),
    pets : ko.observableArray(["Cat", "Dog", "Fish"]),
    type : "Customer"
};
viewModel.hasALotOfPets = ko.computed(function() {
    return this.pets().length > 2
}, viewModel)


var jsonData = ko.toJSON(viewModel);

但是,如果我不想要视图模型中的所有内容,该怎么办?我可以只选择n个项目吗?

1 个答案:

答案 0 :(得分:1)

这里有两个概念:

  1. 从Knockout observable
  2. 中检索对象
  3. 操作JavaScript数组
  4. 代码:

    var start = 1; // index of Dog 
    var n = 1; // just one item 
    var jsonData = ko.toJSON(viewModel.pets().slice(start, start + n)); 
    

    在Knockout中,observables是函数。要设置其值,请使用参数调用它。要获得它的价值,你可以称之为。

    JavaScript数组有一个切片函数,可用于获取更小的数组。

    根据对问题的评论更新:

    如果您想从viewModel中获取n个字段,ko.toJSON将对子集化视图模型起作用:

    var n = 2;
    var count = 0;
    var subModel = {};
    for (var k in viewModel) {
        if (count >= n) break;
        if (viewModel.hasOwnProperty(k)) {
            subModel[k] = viewModel[k];
            count++;
        }
    }
    
    var jsonData = ko.toJSON(subModel);
    

    如果您只想要特定字段,请使用以下内容创建子集模型:

    var jsonData = ko.toJSON({
        firstName: viewModel.firstName,
        type: viewModel.type
    });