/ / bootloader durandal typcript - typový, durandal, durandal-2.0

durandal typcript bootloader - typový, durandal, durandal-2.0

Chcel by som vytvoriť nejaký obal okolo durandalu pomocou strojopisu, aby sa ľahko vytvoril nový SPA aplikácie ľahké pre môj vývojový tím.

Dovoľte mi stručne popísať spôsob, akým by som chcelštruktúra môjho obalu; tam by bola pôvodná trieda bootstrap a konfigurácia, ktorú musí vývojár konfigurovať na nastavenie novej aplikácie. Tu je to, čo by som mohol dosiahnuť zatiaľ.

appcore.d.ts

declare module "system/App"
{
var appcore: SpaApp;
export = appcore;
}

interface SpaApp {
isInDebugMode: boolean;
InitRoute: InitialRoute;
AppTitle: KnockoutObservable<string>;
Init: () => void;
}
interface InitialRoute {
Viewmodel: string;
animationMode: string;
}

app.ts

import app = require("durandal/app");
import viewlocator = require("durandal/viewLocator");
import system = require("durandal/system");

class Bootloader implements SpaApp
{
isInDebugMode: boolean;
InitRoute: InitialRoute;

AppTitle: KnockoutObservable<string>;

Init: () => void;

constructor(title: string)
{
this.AppTitle = ko.observable<string>();
this.InitRoute = { Viewmodel: "dsasda", animationMode: "entrance" };
this.Init = this.initapp;
}

private initapp()
{
system.debug(this.isInDebugMode);
app.title = this.AppTitle();
app.configurePlugins({
router: true,
dialog: true,
widget: true
});

app.start().then(() => {
viewlocator.useConvention();
app.setRoot(this.InitRoute.Viewmodel, this.InitRoute.animationMode);
});
}
}

export = Bootloader;

to všetko kompiluje dobre a app.ts je zostavený ako modul AMD, ale skutočný problém začína, keď som sa pokúsil vytvoriť hlavný bod enty pre svoju aplikáciu

main.ts

requirejs.config({
paths: {
"text": "../Libs/text",
"durandal": "../Libs/durandal",
"plugins": "../Libs/durandal/plugins",
"transitions": "../Libs/durandal/transitions",
"knockout": "../Libs/knockout"
}
});

var apphost = require("system/App");

po napísaní apphost. Nevidím žiadnu intellisence pre môj apphost. to, čo by som chcel dosiahnuť, je mať main.ts touto cestou.

requirejs.config({
paths: {
"text": "../Libs/text",
"durandal": "../Libs/durandal",
"plugins": "../Libs/durandal/plugins",
"transitions": "../Libs/durandal/transitions",
"knockout": "../Libs/knockout"
}
});

var apphost = require("system/App");

apphost.AppTitle("my sample SPA app");
apphost.isInDebugMode = true;
apphost.InitRoute = {
Viewmodel: "viewmodels/shell",
animationMode: "entrance"
};

apphost.Init();

a zostavené do main.js tak to vyžadujú moje aplikácie.

moja otázka je: čo robím zle a prečo nemôžem vidieť všetky vlastnosti a metódu Init po zadaní apphost.

odpovede:

1 pre odpoveď č. 1

Ak chcete intellisense / typesafety po a require volajte, musíte použiť import foo = require("filename") syntax.

áno,

import apphost = require("system/App");

Sú to známe a externé moduly v strojárstve a musíte skompilovať svoj kód pomocou --module príznak kompilátora.

PS: Mám video o téme http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1