Donc, j'ai des problèmes avec la compilation de classes C# converties en utilisant Typewriter. Le tapuscrit produit que je vais montrer ci-dessous ne compile pas correctement pour exiger des dépendances dans la sortie JS. Cela entraîne un tas de fichiers manquants dans le navigateur.Tapcript 2.3 ne compile pas correctement AMD dans Visual Studio?
Voici un exemple du tapuscrit avec une instruction d'importation d'un autre fichier - l'autre fichier ressemble beaucoup à ce code avec une interface exportée et classe:
Si vous pouvez me aider à comprendre ce qui se passe ici, il serait grandement apprécié.
// -- Imports --
import { ChecklistItemState, IChecklistItemState } from './ChecklistItemState';
//
// -- Interface --
export interface IChecklistItem {
itemId: number;
workflowPhaseId: number;
task: string;
description: string;
sortOrder: number;
created: Date;
modified: Date;
state: ChecklistItemState;
}
//
// -- Knockout Class --
export class ChecklistItem {
itemId = ko.observable<number>();
workflowPhaseId = ko.observable<number>();
task = ko.observable<string>();
description = ko.observable<string>();
sortOrder = ko.observable<number>();
created = ko.observable<Date>();
modified = ko.observable<Date>();
state = ko.observable<ChecklistItemState>();
constructor(model: IChecklistItem) {
this.map(model);
}
//
// -- Map Interface to Class --
map(model: IChecklistItem) {
this.itemId(model.itemId);
this.workflowPhaseId(model.workflowPhaseId);
this.task(model.task);
this.description(model.description);
this.sortOrder(model.sortOrder);
this.created(model.created);
this.modified(model.modified);
this.state(model.state);
}
//
// -- Return JSON Model --
getModel() {
return {
itemId: this.itemId(),
workflowPhaseId: this.workflowPhaseId(),
task: this.task(),
description: this.description(),
sortOrder: this.sortOrder(),
created: this.created(),
modified: this.modified(),
state: this.state(),
}
}
//
}
//
Vous pouvez voir que ChecklistItemState est utilisé non seulement dans l'interface de IChecklistItem mais aussi la classe de ChecklistItem comme « État ».
Vous imagine que la compilation de ce code serait require pour le fichier ./ChecklistItemState mais voici le code compilé réel:
define(["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//
// -- Knockout Class --
var ChecklistItem = (function() {
function ChecklistItem(model) {
this.itemId = ko.observable();
this.workflowPhaseId = ko.observable();
this.task = ko.observable();
this.description = ko.observable();
this.sortOrder = ko.observable();
this.created = ko.observable();
this.modified = ko.observable();
this.state = ko.observable();
this.map(model);
}
//
// -- Map Interface to Class --
ChecklistItem.prototype.map = function (model) {
this.itemId(model.itemId);
this.workflowPhaseId(model.workflowPhaseId);
this.task(model.task);
this.description(model.description);
this.sortOrder(model.sortOrder);
this.created(model.created);
this.modified(model.modified);
this.state(model.state);
};
//
// -- Return JSON Model --
ChecklistItem.prototype.getModel = function() {
return {
itemId: this.itemId(),
workflowPhaseId: this.workflowPhaseId(),
task: this.task(),
description: this.description(),
sortOrder: this.sortOrder(),
created: this.created(),
modified: this.modified(),
state: this.state(),
};
};
return ChecklistItem;
}());
exports.ChecklistItem = ChecklistItem;
});
//
//# sourceMappingURL=ChecklistItem.js.map
Pour montrer qu'il compile tout autre code correctement est ici une autre extrait de code qui affiche correctement l'appel "define" dans le JS compilé.
import { SnakeViewModel } from '../../../Core/classes/SnakeViewModel';
let initModel = {
projId: $("#projId").val(),
wfId: $("#wfId").val()
},
viewModel;
$.post("/ProjectApi/ProjectSnakeView",
initModel,
data => {
if (data != null) {
console.log(data);
var viewModel = new SnakeViewModel(data);
}
});
Et voici la sortie de ce code compilé:
define(["require", "exports", "../../../Core/classes/SnakeViewModel"],
function (require, exports, SnakeViewModel_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var initModel = {
projId: $("#projId").val(),
wfId: $("#wfId").val()
}, viewModel;
$.post("/ProjectApi/ProjectSnakeView", initModel, function (data) {
if (data != null) {
console.log(data);
var viewModel = new SnakeViewModel_1.SnakeViewModel(data);
}
});
});
//# sourceMappingURL=snake.js.map
Ok, cela décourage ma compréhension de cela. Alors maintenant, je dois comprendre pourquoi 'var viewModel = new SnakeViewModel (data);' revient indéfini .. SnakeViewModel ressemble à la structure de la classe ChecklistItem beaucoup plus complexe. Des idées sur les prochaines étapes? – Aquaritek
Si 'viewModel' reste indéfini, c'est un problème différent de celui sur lequel vous vous êtes concentré lorsque vous avez écrit votre question. Vous traitez du code asynchrone ici. Êtes-vous sûr de vouloir voir 'viewModel' correctement? Avez-vous essayé de mettre un 'console.log' ** immédiatement ** après' var viewModel = new SnakeViewModel (data); 'et voyez quelle valeur' viewModel' a? Il est important que 'console.log' soit ** immédiatement ** après l'appel' new', et non, par exemple, à la fin de votre module. (Je vois aussi que vous définissez 'viewModel' deux fois: dans la portée externe du module et dans le rappel.) – Louis
Il s'avère que c'était une question de Titre vs Camel - pouah ... Maintenant, je réalise que mon observable KO est seulement un niveau profond ...Ici nous allons sur le voyage de traverser et instancier chacun des objets de niveau inférieur de SnakeViewModel :). Merci de m'avoir sorti des mauvaises herbes dans mon esprit lol. – Aquaritek