Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 打字脚本和敲除自定义活页夹_Typescript_Knockout.js_Data Binding - Fatal编程技术网

Typescript 打字脚本和敲除自定义活页夹

Typescript 打字脚本和敲除自定义活页夹,typescript,knockout.js,data-binding,Typescript,Knockout.js,Data Binding,我想创建一个typescript类,该类将使用Mecanism of knockout完成所有绑定。第一步已经完成,但现在我被卡住了。 我可以将数据绑定到我的html,但我不能操作它们并刷新绑定 到目前为止,我有: import * as ko from "knockout"; module Data { export class Binder { private _observableContext = ko.observable(); constr

我想创建一个typescript类,该类将使用Mecanism of knockout完成所有绑定。第一步已经完成,但现在我被卡住了。 我可以将数据绑定到我的html,但我不能操作它们并刷新绑定

到目前为止,我有:

import * as ko from "knockout";

module Data {
    export class Binder {
        private _observableContext = ko.observable();

        constructor() { ... }

        public get ObservableContext() {
            return this._observableContext ;
        }
        public set ObservableContext(value: any) {
            this._observableContext = value;
        }

        public bind(elementID: string) {
            ko.applyBindings(this._observableContext, $("#"+elementID));
        }
    }
}
我是这样用的:

Class MyPage {

    private _binder: Data.Binder;

    public constructor() {

        this._binder.ObservableContext({
            data1: MethodA,
            data2: SomeObject.GetData(),
            ...
        });
        this._binder.bind("someHtmlID");

    }

    public MethodA = () => {
        // do some operations on the binder.ObservableContext() and refresh data
    }

}
我尝试了许多方法使其工作,但在修改了_绑定器之后,仍然无法刷新绑定。 活页夹数据已完全更改,但结果不会显示在屏幕上


有什么想法吗?

我不太清楚活页夹的目的是什么,但是我假设您的主要任务是使TypeScript与knockout一起工作。 由于TypeScript只是JavaScript的一个超级版本,所以您可以完成淘汰网站上描述的所有标准操作

但是,为了更方便地开发,建议使用

TypeScript敲除的经典示例:

模板:

<div id="content">
    <div data-bind="text: previousCount"></div>
    <div data-bind="text: count"></div>
    <button type="button" data-bind="click: increaseCount">Click Me!</button>
</div>
您的视图模型

import ko from "knockout";

class MyViewModel {
    // use observable for binding to view
    count: KnockoutObservable<number> = ko.observable(0);

    // computed property example
    previousCount: KnockoutComputed<number> = ko.pureComputed(()=> {
        const currentCount = this.count();
        return currentCount - 1;
    });

    constructor() {
        const element = document.getElementById("content");
        ko.applyBindings(this, element);
    }

    increaseCount = ()=> {
        const currentCount = this.count();
        this.count(currentCount + 1);
    }
}

你想用活页夹达到什么目的?您是否只需要更改绑定器上下文中的属性值并期望UI更新?或者最终会变得更复杂?目的是创建一个使用击倒功能的自定义框架。所以binder对象应该在我的类(实际上像viewmodels)和HTML之间进行所有绑定,由于没有经典的导航,导航是通过实例化类并在一个容器中加载html的一部分来完成的。如果您试图基于敲除构建自定义SPA,那么最好从角度进行调整,如果您仍然希望使用敲除来实现这一点,那么从现有解决方案中选择一些好的路由器,并根据您的需要进行调整。我建议每一件事都要基于。因此,每个页面都可以是单独的组件,每个页面都可以使用绑定流,如中所述。感谢您的建议。我将看一看组件,这是我的应用程序的精神,所以它肯定会有用。一开始我没想到要用角度。现在切换到angular还不晚,我也会看一看。非常感谢。谢谢你的回答。我想我将不得不改变我的观点,做一些不那么复杂的事情。