0

我正在尝试查看是否可以将 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个项目吗?

4

1 回答 1

1

这里有两个概念:

  1. 从 Knockout observable 中检索对象
  2. 操作 JavaScript 数组

代码:

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

在 Knockout 中,可观察对象是函数。要设置它的值,您可以使用参数调用它。为了获得它的价值,你调用它。

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
});
于 2013-05-31T20:21:46.123 回答