通过TypeScript运行Knockout教程以更好地理解它,我收到一个错误:“JavaScript运行时错误:初始化时通过的参数observable数组必须是一个数组,或者是null,或者是undefined。“ 尝试了几件事,这是我目前的位置,当然我错过了一些东西。我的主要目的是更好地理解TypeScript中的ObservableArrays。 TS代码的第25行出现故障。 'initialMeal'参数包含数组对象,但'膳食'属性拒绝它。ko.observableArray不接受TypeScript中的数组类型
/// <reference path="typings/jquery/jquery.d.ts" />
/// <reference path="typings/knockout/knockout.d.ts" />
module Home {
export class Index {
name: KnockoutObservable<string>;
availableMeals: any[];
meal: KnockoutObservableArray<InitialMeal>;
seats: KnockoutObservableArray<any>;
constructor() {
let self = this;
// Non-editable catalog data - would come from the server
self.availableMeals = [
{ mealName: "Standard (sandwich)", price: 0 },
{ mealName: "Premium (lobster)", price: 34.95 },
{ mealName: "Ultimate (whole zebra)", price: 290 }
];
}
seatReservation(name: string, initialMeal: InitialMeal): void {
let self = this;
self.name = ko.observable(name);
self.meal = ko.observableArray(initialMeal);
}
reservationsViewModel() {
let self = this;
// Editable data
self.seats = ko.observableArray([
self.seatReservation("Bob", self.availableMeals[1]),
self.seatReservation("Stan", self.availableMeals[0])
]);
}
}
interface InitialMeal extends Array<any> {
mealName: string;
price: number;
}
}
$(document).ready(function() {
let vm = new Home.Index();
ko.applyBindings(vm.reservationsViewModel());
});
<div class="row">
<div class="col-md-12">
<table>
<thead>
<tr>
<th>Passenger name</th>
<th>Meal</th>
<th>Surcharge</th>
<th></th>
</tr>
</thead>
<!-- Todo: Generate table body -->
<tbody data-bind="foreach: seats">
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: meal().mealName"></td>
<td data-bind="text: meal().price"></td>
</tr>
</tbody>
</table>
</div>
</div>
你为什么想'meal'是一个数组? –
你没有给它一个数组。您将它设置为initialMeal,它是一个单独的InitialMeal对象。如果你用括号包住它,那么它就成为一个数组,但是与迈克尔贝斯特相似,我怀疑这是否真的是你想要做的。 –
由于膳食有2项:膳食名称&费用 – Neurothustra