gpt4 book ai didi

dart - 如何将事件监听器添加到动态元素?

转载 作者:行者123 更新时间:2023-12-03 03:13:40 25 4
gpt4 key购买 nike

我有以下HTML:

<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Description</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Item 1</td>
<td>Description of Item 1</td>
<td>
<a href="#" data-action="edit" data-item-id="1">Edit</a>
<a href="#" data-action="delete" data-item-id="1">Delete</a>
</td>
</tr>
<tr>
<td>2</td>
<td>Item 2</td>
<td>Description of Item 2</td>
<td>
<a href="#" data-action="edit" data-item-id="2">Edit</a>
<a href="#" data-action="delete" data-item-id="2">Delete</a>
</td>
</tr>
</tbody>
</table>

表行( tr elements)是动态添加的

我将click事件连接到所有 Edit链接,如下所示:
void wireUpTableEvents() {
var editLinks = queryAll('#order-items table tbody [data-action="edit"]');

editLinks.forEach((element) {
element.on.click.add((event){
print(element.attributes['data-item-id']);
});
});
}

如上所述,表行( tr elements)是动态添加的,因此上述代码仅在执行执行添加行的方法后调用 wireUpEvents 时才有效。

在将来动态添加元素时,是否有人知道语法或使用DARTon.click.add()向元素添加事件侦听器?

我尝试检查DART文档,但documentation on Event Listeners为空白。

如果我要使用jQuery,则可以使用类似于以下内容的内容:
$("#order-items table")on("click", "tbody [data-action="edit"]", function(){...})

...但是我只想使用DART编写示例应用程序。

编辑
尽管future对于回调来说听起来很棒,但由于我的场景中没有长时间运行的任务,因此对于我需要的东西似乎有些过高。

我能够最接近地将事件侦听器附加到静态元素,但是处理以后的子元素的click事件是:
void wireUpTableEvents() {
var tableBody = query('#order-items table tbody');

// Attach Event Listener to the static tbody, which always exists.
tableBody.on.click.add((event) {
var clickedElement = event.srcElement;
var itemId = clickedElement.attributes['data-item-id'];

// Check if the clicked element was either one of the edit links or one of the delete links.
switch (clickedElement.attributes['data-action']) {
case 'edit':
// Replace print with calling a method to process edit request for this item.
print('processing edit click from item with id: $itemId');
break;
case 'delete':
// Replace print with calling a method to process delete request for this item.
print('processing delete click from item with id: $itemId');
break;
}
});
}​

上面的代码可以在加载任何实际的tr元素之前执行,并在以后的某个未知阶段加载tr元素之后仍然有效。

我还发现它现在涵盖了任何动态添加的行,预加载的行以及用于新记录的其他动态添加的行等。

最佳答案

听起来您需要使用Dart的Future对象。 John Evans最近发布了post,它提供了出色的概述。我将尝试举一个简单的例子:

假设我有一个名为htmlInDart的类,其调用如下:

void main() {
var htmlExample = new HtmlInDart().createStyles();
htmlExample
..then((htmlExample) => htmlExample.buildPage())
..then((htmlExample) => htmlExample.addListeners());
}

该类可能看起来像这样:

class htmlInDart {

htmlInDart();

Future<htmlInDart> createStyles() {
final c = new Completer();
// create some styles
c.complete(this);
return c.future;
}

Future<htmlInDart> buildPage() {
final c = new Completer();
// build the page
c.complete(this);
return c.future;
}

Future<htmlInDart> addListeners() {
final c = new Completer();
// add some listeners
c.complete(this);
return c.future;
}

希望这可以使您了解如何针对您的案例实现它。

关于dart - 如何将事件监听器添加到动态元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895951/

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