knockout.js - מערך של אובזרבלס ב-Knockout ב-TypeScript
מהי הדרך הנכונה לאתחל observableArray של Knockout במחלקת TypeScript?
אני עושה משהו כזה:
module ViewModel {
declare var ko;
export class IndexPageViewModel {
agencies: any;
constructor () {
this.agencies = ko.observableArray([]);
}
}
}
var ivm = new ViewModel.IndexPageViewModel();
ivm.agencies.push({name: "name", alias : "alias"});
for (var i = 0; i < ivm.agencies.length; i++){
alert(ivm.agencies[i].name);
}
נראה פשוט מספיק, אבל כשאני מנסה לגשת לנכס agencies כפי שמצוין, ההרצה נתקעת. האם פספסתי משהו?
תשובה #1
זוהי השורה שבה הטעות שלך היא:
agencies[i]
כאשר אתה ניגש למערך שניתן לצפייה, הוא בעצם מכוסה בתוך פונקציה ולכן אתה ניגש אליו כך:
agencies()[i]
גם תעשה לעצמך טובה והורד את ההגדרות של Knockout מ: https://github.com/borisyankov/DefinitelyTyped
אז הכרז על התכונות שלך עם סוגים:
module ViewModel {
export class IndexPageViewModel {
agencies: KnockoutObservableArray;
constructor () {
this.agencies = ko.observableArray([]);
}
}
}
תשובה #2
רק עשיתי את זה ב-TypeScript 1.3 (למרות שזה אמור לעבוד גם בגרסאות קודמות):
pendingAddAssociations: KnockoutObservableArray<ControllerModel> = ko.observableArray<ControllerModel>([]);
לדוגמה שלך, אם יש לך מחלקת סוכנות.
export class IndexPageViewModel {
agencies: KnockoutObservableArray<Agency>;
constructor () {
this.agencies = ko.observableArray<Agency>([]);
}
}
גם מצאתי שאתה יכול להקצות לכל this.agencies=<any>[]; זה שימושי אם אתה משתמש בתוסף Knockout ES5.
