knockout.js での条件付きレンダリングに問題があります。をobservableArray
使用して作成されたビューモデルに がありko.utils.arrayMap()
ます。私のJavaScriptコードでは、その配列の長さを出力すると、予想される長さが返されます。ただし、ビューで同じ長さを出力しようとすると、常に 0 になります。
ここに私のビューコードがあります:
<!-- ko if: people().length == 0 -->
<p data-bind="text: people().length"></p>
<!-- always outputs 0 -->
<!-- /ko -->
<!-- ko if: people().length > 0 -->
<p data-bind="text: people().length"></p>
<!-- never reaches this -->
<!-- /ko -->
Javascript:
var data = [
{
firstName: "Bob",
lastName: "Smith"
},
{
firstName: "John",
lastName: "Doe"
},
{
firstName: "Jane",
lastName: "Doe"
}
];
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
function ViewModel(data) {
var self = this;
self.people = ko.observableArray(ko.utils.arrayMap(data, function(i) {
return ko.observable(new Person(i.firstName, i.lastName));
}));
console.log(self.people().length); //Outputs 3, as expected
}
ko.applyBindings(new ViewModel(data));