0

我创建了一个 SharePoint 框架 Webpart。

我调用了一个 web 服务,它从 sharepoint(来自 termstore 的术语)返回一些数据,并为每个术语生成一个显示该术语的 html。在每个术语的 onclick 上,我想调用一个打字稿函数,将术语作为参数传递,以获取其子术语。

下面的代码创建了以下错误行为:当显示 web 部件时,它会在我什至没有点击时自动调用函数 this.readIterm !

我是否遗漏了什么或设计做错了?我试图用 onclick="readIterm($(term))" 替换 onclick="${this.readIterm(term)}" 但它什么也没做。

下面的代码

terms.forEach(term => {
              htmlContent +=
                `<div class="w3-card w3-third w3-margin-bottom" style="" onclick="${this.readIterm(term)}">
                      <header class="w3-container w3-blue">
                        <h1>Header</h1>
                      </header>
                    <div class="w3-container">
                      <span>${term.name}</p>
                    </div>
                    <footer class="w3-container w3-blue">
                      <h5>Footer</h5>
                    </footer>
                    </div>`

然后将此 html 添加到 this.domElement.innerHTML 中,并在 webpart 中显示它。

public readIterm(myTerm: ITerm) { alert("readIterm is clicked"); }

如果我不遵循最佳实践,请提前感谢您的帮助和指导!

杰夫

4

2 回答 2

2

还有另一种附加事件侦听器的方法。

请参阅下面的代码示例。这对我来说非常有效:(注意:这是一个基本想法。您可以参考此代码并相应地对您的代码进行更改。)

public render(): void{ 

this.domElement.innerHTML = ` <div class="form-group">
   <button class="btn btn-success" id="btnReadAllItems">
      <span class="ms-Button-label">Read All Items</span>
   </button>
   <button class="btn btn-success" id="btnReadItemById">
      <span class="ms-Button-label">Read Item By Id</span>
   </button>
</div>`; 
this._setButtonEventHandlers(); 

}



private _setButtonEventHandlers(): void {
   const webPart: SpfxCrudWebPart = this;
   this.domElement.querySelector('#btnReadAllItems').addEventListener('click', () => {
      this._GetListItemsNF();
   });
}


private _GetListItemsNF(): void {
   // 
   //
   //
}

另一种方法如下。(但您必须根据您的代码进行一些更改)

public render(): void{ 
      htmlContent +=
        `<div class="w3-card w3-third w3-margin-bottom" id="test">
              <header class="w3-container w3-blue">
                <h1>Header</h1>
              </header>
            <div class="w3-container">
              <span>${term.name}</p>
            </div>
            <footer class="w3-container w3-blue">
              <h5>Footer</h5>
            </footer>
        </div>`
    }

    this._setButtonEventHandlers(); 

    this.myTerm = term;  // Here we are assigning value to the `myTerm` variable. And `myTerm` is a public property, So value of `myTerm` will be accessible using `this.myTerm`
}


public myTerm: ITerm; // here we are declaring `myTerm` variable

public readIterm():void{

    // here you can access the cariable `myTerm` using `this.myTerm`.

    // alert(this.myTerm);

    // alert("readIterm is clicked"); 

}

private _setButtonEventHandlers(): void {
   this.domElement.querySelector('#test').addEventListener('click', () => { this.readIterm(); });
}
于 2017-09-04T08:15:35.473 回答
0

而是 onClick 而不是 onclick。然后检查以确保通过调用控制台 (console.log) 进入您的“readIterm”方法。

于 2017-08-29T07:37:26.313 回答