Knockout数据绑定串联的字符串数组

Sha*_*ane 0 javascript arrays knockout.js

我如何在Knockout中数据绑定串联的字符串数组?我想做这样的事情:

<span data-bind='text: foreach person in persons person.name+","+person.age>
Run Code Online (Sandbox Code Playgroud)

显然语法是错误的,但是可以像上面这样做而不为每个人创建多个跨度吗?

小智 5

你可以在data-bind中使用任何类型的有效javascript.所以想想有可能做这样的事情:

选项1 - 看小提琴

假设这样的模型:

var model = {
  people : ko.observableArray([
    {name: "Name1", age: 30},
    {name: "Name2", age: 31},
    {name: "Name3", age: 32},
  ])
}

ko.applyBindings(model);
Run Code Online (Sandbox Code Playgroud)

我们可以做的:

<span data-bind='text: people().map(function(p){return p.name + "," + p.age}).join(", ")'> </span>
Run Code Online (Sandbox Code Playgroud)

选项2 - 见小提琴

但是嵌入coplex内联javascript不是一个好习惯,我建议你创建一个像这样的计算属性

var model = {
  people : ko.observableArray([
    {name: "Name1", age: 30},
    {name: "Name2", age: 31},
    {name: "Name3", age: 32},
  ]),
}

model.allPeople = ko.computed(function() {
    return model.people().map(function(p){return p.name + "," + p.age}).join(", ");
});

ko.applyBindings(model);
Run Code Online (Sandbox Code Playgroud)

和HTML:

<span data-bind='text: allPeople'> </span>
Run Code Online (Sandbox Code Playgroud)