gpt4 book ai didi

javascript - Hello World Knockout 点击绑定(bind)到 Typescript 示例

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:02 25 4
gpt4 key购买 nike

这里是新手问题,试图指出正确的方向。

在 HTML 模板中,我有一个 DOM 元素:

<a href=# data-bind="click: $parent.test">«</a>

在 Typescript 文件中,我有:

public test() {
alert("hello");
}

为了通过点击调用警报功能,我应该查看什么?

详细说明并添加更多上下文:

我的 ViewModel 看起来像这样:

 import * as ko from 'knockout';
import styles from './QuestCustomBlog.module.scss';
import { IBlogPost, IBlogListings } from './IBlogListings';

export interface IQuestCustomBlogPostBindingContext extends IBlogListings {
shouter: KnockoutSubscribable<{}>;
}

export interface IBlogListings {
BlogPosts: IBlogPost[];
Previous: string; //for paging backwards
Next: string; // for paging forwards
}

export default class BlogListingsViewModel {

public BlogListings: KnockoutObservable<IBlogPost[]> = ko.observable(null);
public Next: KnockoutObservable<string> = ko.observable(null);
public Previous: KnockoutObservable<string> = ko.observable(null);


constructor(bindings: IQuestCustomBlogPostBindingContext) {
this.BlogListings(bindings.BlogPosts);
this.Next(bindings.Next);
this.Previous(bindings.Previous);

bindings.shouter.subscribe((value: IBlogPost[]) => {
this.BlogListings(value);
}, this, 'BlogListings');

bindings.shouter.subscribe((value: string) => {
this.Next(value);
}, this, 'Next');

bindings.shouter.subscribe((value: string) => {
this.Previous(value);
}, this, 'Previous');


}

public test() {
alert('test');
}
}

我的 ko.applybindings 看起来像这样:

export default class QuestCustomBlogWebPart extends 
BaseClientSideWebPart<IQuestCustomBlogWebPartProps> {
private _id: number;
private _componentElement1: HTMLElement;
private _koBlogSiteURL: KnockoutObservable<string> = ko.observable('');
private _koBlogListings: KnockoutObservable<IBlogPost[]> =
ko.observable(null);

/**
* Shouter is used to communicate between web part and view model.
*/
private _shouter: KnockoutSubscribable<{}> = new ko.subscribable();

/**
* Initialize the web part.
*/
protected onInit(): Promise<void> {
this._id = _instance++;

const tagName1: string = `BlogListingsComponent-${this._id}`;
this._componentElement1 = this._createComponentElement(tagName1);
ko.components.register(
tagName1,
{
viewModel: BlogListingsViewModel,
template: require('./BlogListingsTemplate.html'),
synchronous: false
}
);

this._getPagedBlogListings()
.then((response) => {

const bindings1: IQuestCustomBlogPostBindingContext = {
BlogPosts: response.BlogPosts,
shouter: this._shouter,
Next: response.Next,
Previous: response.Previous
}
ko.applyBindings(bindings1, this._componentElement1);

})

return super.onInit();
}

您看到的所有绑定(bind)都有效,除了我似乎无法弄清楚如何将 test() 函数绑定(bind)到点击事件...

最佳答案

这很奇怪,但你不能轻易地将 knockout 事件绑定(bind)到原型(prototype)函数(而 public Test() 就是这个函数)。

尝试将 test() 更改为:

public test = ()=> {
alert('test');
}

编辑:我认为在这种情况下你不需要 $parent

关于javascript - Hello World Knockout 点击绑定(bind)到 Typescript 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com