Loggfila med KnockoutJS

stemmer
132

Er det noen prøve å bruke Loggfila med KnockoutJS? Jeg er bare nysgjerrig på hvordan de ville arbeide sammen?

Redigere

Her er det jeg har, synes å fungere

declare var ko: any;
declare var $: any;
class ViewModel {
    x = ko.observable(10);
    y = ko.observable(10);

}

$(() => {
    ko.applyBindings(new ViewModel());
});

Dette genererer inn følgende Javascript:

var ViewModel = (function () {
    function ViewModel() {
        this.x = ko.observable(10);
        this.y = ko.observable(10);
    }
    return ViewModel;
})();
$(function () {
    ko.applyBindings(new ViewModel());
});
Publisert på 02/10/2012 klokken 11:52
kilden bruker
På andre språk...                            


6 svar

stemmer
105

Se på DefinitelyTyped .

"Loggfila typedefinisjoner oppbevaringssted for populære Javascript-biblioteker"

Svarte 26/10/2012 kl. 10:46
kilden bruker

stemmer
57

Jeg laget denne lille grensesnitt for å få statiske typer for Knockout:

interface ObservableNumber {
        (newValue: number): void;               
        (): number;                             
        subscribe: (callback: (newValue: number) => void) => void;
}
interface ObservableString {
        (newValue: string): void;               
        (): string;                             
        subscribe: (callback: (newValue: string) => void) => void;
}
interface ObservableBool {
    (newValue: bool): void;             
    (): bool;                               
    subscribe: (callback: (newValue: bool) => void) => void;
}

interface ObservableAny {
    (newValue: any): void;              
    (): any;                                
    subscribe: (callback: (newValue: any) => void) => void;
}

interface ObservableStringArray {
    (newValue: string[]): void;
    (): string[];
    remove: (value: String) => void;
    removeAll: () => void;
    push: (value: string) => void;
    indexOf: (value: string) => number;
}

interface ObservableAnyArray {
    (newValue: any[]): void;
    (): any[];
    remove: (value: any) => void;
    removeAll: () => void;
    push: (value: any) => void;
}

interface Computed {
    (): any;
}

interface Knockout {
    observable: {
        (value: number): ObservableNumber;
        (value: string): ObservableString;
        (value: bool): ObservableBool;
        (value: any): ObservableAny;
    };
    observableArray: {
        (value: string[]): ObservableStringArray;
        (value: any[]): ObservableAnyArray;
    };
    computed: {
        (func: () => any): Computed;
    };
}

Sett den i "Knockout.d.ts" og deretter referere til den fra dine egne filer. Som du kan se, ville det ha stor nytte av generiske legemidler (som kommer i henhold til spesifikasjonene).

Jeg har bare gjort noen grensesnitt for ko.observable (), men ko.computed () og ko.observableArray () enkelt kan legges i samme mønster. Oppdatering: Jeg fikset signaturer for abonnere () og lagt eksempler på beregnet () og observableArray ().

For å bruke fra din egen fil, legg dette på toppen:

/// <reference path="./Knockout.d.ts" />
declare var ko: Knockout;
Svarte 02/10/2012 kl. 14:23
kilden bruker

stemmer
14

Prøv min realisering av Loggfila grensesnitt erklæringer (med enkelt eksempel)
https://github.com/sv01a/TypeScript-Knockoutjs

Svarte 05/10/2012 kl. 05:47
kilden bruker

stemmer
6

Ingenting ville endre seg i forhold til måten knockout bindingene er deklarert i markup men vi ville få IntelliSense godhet når grensesnittene er skrevet for knockout biblioteket. I denne forbindelse vil det fungere akkurat som jquery Sample , som har en loggfila inneholder grensesnitt for det meste av jQuery api .

Jeg tror at hvis du blir kvitt de to variabeldeklarasjoner for ko og $ koden vil fungere. Disse skjuler selve ko og $ variabler som ble opprettet da knockout og jQuery scripts lastet.

Jeg måtte gjøre dette til port Visual Studio mal prosjekt til knockout:

app.ts:

class GreeterViewModel {
    timerToken: number;
    utcTime: any;

    constructor (ko: any) { 
        this.utcTime = ko.observable(new Date().toUTCString());
        this.start();
    }

    start() {
        this.timerToken = setInterval(() => this.utcTime(new Date().toUTCString()), 500);
    }
}

window.onload = () => {
    // get a ref to the ko global
    var w: any;
    w = window;
    var myKO: any;
    myKO = w.ko;

    var el = document.getElementById('content');
    myKO.applyBindings(new GreeterViewModel(myKO), el);
};

default.htm:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>TypeScript HTML App</title>
    <link rel="stylesheet" href="app.css" type="text/css" />
    <script src="Scripts/knockout-2.1.0.debug.js" type="text/javascript"></script>
    <script src="app.js"></script>
</head>
<body>
    <h1>TypeScript HTML App</h1>

    <div id="content" data-bind="text: utcTime" />
</body>
</html>
Svarte 02/10/2012 kl. 14:02
kilden bruker

stemmer
2

Jeg bruker https://www.nuget.org/packages/knockout.editables.TypeScript.DefinitelyTyped/ og det har alle grensesnitt for Knockout.

Svarte 17/08/2015 kl. 11:34
kilden bruker

stemmer
1

Ok så bare bruker du følgende kommando for å importere knockout typer eller tds.

npm install @types/knockout

Dette vil skape en @types katalog i prosjektene node_modules katalog og indeksen knockout typen definisjonsfilen vil være i en katalog kalt knockout. Deretter gjennom en trippel-slash referanse til typer filer. Dette vil gi stor IDE og typescript funksjoner.

/// <reference path="../node_modules/@types/knockout/index.d.ts" />

Til slutt, bare bruke en erklære uttalelse for å bringe ko variabel i omfang. Dette er sterkt-skrev så hallo IntelliSense.

declare var ko: KnockoutStatic;

Så nå kan du bruke KO akkurat som i Javascript-filer.

skriv bildebeskrivelse her

Håper dette hjelper.

Svarte 04/10/2017 kl. 22:35
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more