2014-12-04 55 views
1

我正在使用模板重复来生成项目列表。这里 简单的问题,我怎么能retrive的“项目”我在“ADDME”的方法点击 我可以看到我打印控制台如何从聚合物飞镖中的无序列表中检索项目

这里是我的代码

<template repeat="{{item in items}}"> 
<div on-click="{{addme}}" layout horizontal justified> 
     <div>{{item.name}}</div> 
     <core-icon icon="settings"></core-icon> 
</div> 
</template> 

addme(event, details,node){ 
    print(event); 
    print(details); 
    print(node.selec); 
    selectedExercises.add(ex); 
} 

干杯

+0

貌似http://stackoverflow.com/questions/24530054 – 2014-12-05 05:15:01

回答

2

this answer

使用模板的模板值属性:

<template repeat="{{item in items}}"> 
    <div on-click="{{addme}}" layout horizontal justified template-value="{{item}}"> 
    <div>{{item.name}}</div> 
    <core-icon icon="settings"></core-icon> 
    </div> 
</template> 

使用nodeBind在事件处理:

import 'package:template_binding/template_binding.dart' as tb; 

addme(event){ 
    tb.TemplateInstance ti = tb.nodeBind(e.target).templateInstance; // get access to the TemplateInstance of the element 

    // TemplateInstance provides access to the model and the actual value 
    var ex = ti.model.value; 

    selectedExercises.add(ex); 
} 
2

有很多的方式!取决于你真正需要什么样的数据。在事件处理程序

<template repeat="{{item in items}}"> 
    <div on-click="{{addme}}" data-item-name="{{item.name}}" layout horizontal justified> 
    <div>{{item.name}}</div> 
    <core-icon icon="settings"></core-icon> 
    </div> 
</template> 

然后:举例来说,如果你能使用的名称(或其他识别信息)追踪您的item例如,你可以做这样的事情

addme(event, details, target){ 
    String name = target.dataset['item-name']; 

    // then find your item instance using "name" 
} 

或者你可以为您的物品创建自定义元素,也许<item-view>,然后重复这些操作。

<template repeat="{{item in items}}"> 
    <item-view item="{{item}}"></item-view> 
</template> 

这使得它更容易和更清洁的得到你想要的item实例,因为target将包含参考公共财产。让我知道你是否希望看到一个更彻底的例子。

你甚至可以用枚举,这样可以让你的repeat内获得指数做,同样的指数可以用来查找的item比如在原来的List(假设它是一个List你重复)。这看起来是这样的:

<template repeat="{{item in items | enumerate}}"> 
    <div on-click="{{addme}}" data-index="{{item.index}}" layout horizontal justified> 
    <div>{{item.value.name}}</div> 
    <core-icon icon="settings"></core-icon> 
    </div> 
</template> 

你可以进去addme()像指数:

int index = int.parse(target.dataset['index']);

感到困惑?总是有很多方法可以做到,呃?

+0

的DUP感谢您的回答。我认为完成这个任务的方法是使用像你这样的组件:。我把我的点击方法放在item-view的模板中我不知道它是否是好方法,所以如果你有一些例子,我很有趣:)干杯 – BenNG 2014-12-09 16:57:00

+0

你怎么看“核心 - 列表“元素? – BenNG 2014-12-09 17:31:03

+0

如果你只是想创建一个可选项目列表,一个好方法是用''元素包围你的'