Javascript 余烬:单击视图上的事件不触发
我有一个Javascript 余烬:单击视图上的事件不触发,javascript,ember.js,Javascript,Ember.js,我有一个比赛项目的列表,每个项目都呈现为一个视图: <ul> {{#each race in controller}} {{render "race-item" race class="race-item"}} {{else}} <li id="imagine">{{#link-to 'races.create'}}Imagine Fas
比赛项目的列表,每个项目都呈现为一个视图:
<ul>
{{#each race in controller}}
{{render "race-item" race class="race-item"}}
{{else}}
<li id="imagine">{{#link-to 'races.create'}}Imagine Faster{{/link-to}}</li>
{{/each}}
</ul>
这个click事件似乎不会触发,除非它是一个通常处理单击的DOM元素(a
,按钮
,等等)
我怎样才能点击我的li
?我将所有内容都包装在锚中,因为有子元素具有自己的事件和动作
后续问题:看起来即使我的点击工作正常,它也只会将当前视图的isSelected
属性设置为true,而不会将其余视图属性切换为false。如何做到这一点
谢谢。我在这里工作。单击事件应适用于所有元素,包括li。有许多方法可以实现您想要的目标:一种是向控制器发送事件:
App.ItemView = Ember.View.extend({
tagName: 'li',
templateName: 'item-view',
classNameBindings: ['isSelected:selected'],
isSelected: false,
click: function(e) {
this.set('isSelected',true);
this.get('controller').send('itemSelected', this);
}
});
下面是一个工作示例:单击事件应适用于和其他通常不可单击的元素。你能复制一个基本的小提琴来证明这一点吗?您可以使用此提琴作为基础:要将视图的其余属性切换为false,您可以将一个操作从视图发送到arrayControllerthis.get('controller').send('selected')
,您可以在父arrayController中设置所选项。观察该属性的更改,并将所有其他项设置为false
。我可以举一个例子,如果你有一把小提琴来处理另一个问题,或者最好把它作为一个单独的问题来问,这样人们就可以回答一个或另一个问题。我对Ember非常陌生,因为数据设置不同(我使用的是本地存储适配器),所以我无法获得任何要渲染的内容。无论如何,my 上的点击事件肯定不会触发(甚至不会将任何内容记录到控制台)。这可能与我使用的render
有关吗?我已经尝试剥离模板以删除所有其他操作和事件,但似乎没有任何区别。谢谢!您的jsbin示例非常有效。我将{{render}}助手更改为{{view}助手,并使用父控制器处理itemSelected
操作。不确定为什么{render}不起作用。这是一个使用{render}的工作版本。渲染会在幕后为itemview创建一个控制器,因此具有允许您将选择作为模型传递的附加好处。单击某个选项时,请查看控制台。很好的例子,谢谢,但是当我使用{render}时,视图上的单击事件仍然不起作用。我肯定你的例子是正确的,但是我的代码肯定有一些不同的地方,我不知道也不能交流。但是我用{{render}提供的例子有效吗?这肯定是你的环境中的东西;可能是余烬的版本?获得帮助的最佳方式是在JSBin中重现问题。您可能只加载模板,而不加载带有render语句的视图。
App.ItemView = Ember.View.extend({
tagName: 'li',
templateName: 'item-view',
classNameBindings: ['isSelected:selected'],
isSelected: false,
click: function(e) {
this.set('isSelected',true);
this.get('controller').send('itemSelected', this);
}
});