我是TypeScript的新手,我开始学习如何在TypeScript中使用knockout.js以及如何使用knockout.js创建一个viewmodel。这只是一个简单的例子,试图理解模块中的基本类,并且知道我能够使用Client
类创建数据绑定,它正确地工作name
和{{1}但是我有一个C#上下文,所以在C#中你可以创建一个类,如类
例如在C#中你可以创建一个这样的类,创建一个类lastName
的属性
Activity
所以我想用typescript和knockout重现类似的东西。所以这就是我正在尝试的但它没有工作public class Client
{
public string ClientName {get;set;}
public Activity Activity {get;set;}
}
public class Activity
{
public string ActivityName {get;set;}
}
//And call this like c# but with typescript sort of
Client client = new Client();
client.Activity = new Activity();
client.Activity.ActivityName = "Activity name";
“类”我无法得到它的属性和方法。
activity
这就是我正在测试的简单html
module Crm {
export class Client {
name: KnockoutObservable<string>;
lastName: KnockoutObservable<string>;
activity: KnockoutObservable<Activity>;
getName() {
return alert(this.name()); //working correctly on the view
}
//constructor(name:string, lastName:string) {
constructor(){
this.name = ko.observable("");
this.lastName = ko.observable("");
this.activity = ko.observable(new Activity());
}
}
export class Activity {
id: KnockoutObservable<number>;
names: KnockoutObservable<string>;
description: KnockoutObservable<string>;
date: KnockoutObservable<any>;
getActivityName() {
return alert("Actividad: " + this.description()); //not working
}
constructor() {
this.id = ko.observable(0);
this.names = ko.observable("");
this.description = ko.observable("");
this.date = ko.observable("");
}
}
var a = new Client();
console.log(a);
ko.applyBindings(new Client());
}
客户端正在运行,但活动却没有。我不知道我是否以错误的方式尝试这种方式。
答案 0 :(得分:1)
getActivityName
的绑定上下文是Client
对象,因此您有错误的this
对象。
您可以使用固定代码检查fiddle:
getActivityName(client: Client) {
return alert("Actividad: " + client.activity().description());
}
with
绑定更改当前绑定上下文:```
<!-- ko with: activity -->
<input type="text" data-bind="description" />
<button data-bind="click: getActivityName">Try me</button>
<!-- /ko -->
```
您可以在this fiddle中看到这种方法。