2

我正在使用淘汰赛和 TypeScript 。

我收到一个错误:

AppViewModel.prototype.setActive = function (data, event) {
            this.active(data);
        };

从此 TypeScript 文件:

export class AppViewModel {

    ///Properties
    projects = projects;
    error = ko.observable();
    active = ko.observable();
    //setActive: (data,e)=>void;
    ///Constructor
    constructor()
    {
        this.active = ko.observable();
        DataContext.getProjects(this.projects, this.error);


    }

    isActive(data)
    {
        return this.active() == data;
    }
    setActive(data, event) {

        this.active(data);
    }
}

Object # 没有方法'active',它的绑定是这样的:

<li class="nav-header">Projects</li>
            <!-- ko foreach: projects -->
            <li class="">
                <a href="#" data-bind="click: $parent.setActive, css: { active: ($parent.isActive($data)) }">
                    <i class="icon-pencil"></i>
                    <span style="padding-right: 15px;" data-bind="text: title"></span>
                </a>
            </li>
            <!-- /ko --> 

$Parent 应该是 AppViewModel。在我点击链接之前它一直有效。

我不是 100% 确定错误是否与我不理解的绑定或打字稿生成的函数有关,并且处理不当。

原型函数中的 this 是指对象本身吗?还是功能范围?

4

1 回答 1

5

TypeScript 不会尝试猜测this您想要的上下文。如果您想setActive始终使用类实例作为this上下文,您可以bind在构造函数中使用它:

export class AppViewModel {
    ...
    constructor() {
        this.active = ko.observable();
        DataContext.getProjects(this.projects, this.error);
        this.setActive = this.setActive.bind(this);
    }
    ...
}
于 2013-04-16T05:54:00.333 回答