我有一个行数div的视图。单击div时,应选择当前单击的元素。以下是我使用的代码。
{{#each}}
<div {{action target="view" on="click" allowedKeys="shift"}} {{bind-attr class=':user isActive'}} >
{{test}}
</div>
{{/each}}
我的观点由模型支持:
model: function() {
return [{'test':'1'}, {'test' :'2'}, {'test': '3'}, {'test': '4'}];
}
在我看来,我处理了点击处理程序。
click: function( e ) {
if( e.shiftKey ){
this.modelFor("index").send('changeBgSelection', {'test' :'2'} ); // Here I could not get the current clicked elements model.
}
// Here I need to get the current clicked elements model. When I click the second element I need to get as "{'test' :'2'}". But I could not get the current elements model. Instead I can get the whole model.
}
在我的路线中, 点击的元素在此处激活。
actions:{
changeBgSelection: function (params) {
var select = this.get("controller").objectAt(this.modelFor("index").indexOf(params));
select.set('isActive', true)
}
}
那么如何在我的视图中获取当前点击的元素模型?这样我就可以将模型传递给我的Route,按下Shift键激活点击的div。
编辑:Jsbin Link
答案 0 :(得分:0)
在Ember中有两种方法可以响应鼠标:
似乎你试图将两者结合起来,它变得一团糟。我确定有办法让它发挥作用,但我无法找到它。相反,请允许我提出一个替代方案。
一般情况下,如果有一些奇怪的事情正在进行javascript或事件处理(如示例中的SHIFT键),我喜欢在本地化视图中处理它。在这里,每个&#39; TestView&#39;绑定到单个模型实例,它根据用户输入进行操作。
<script type="text/x-handlebars" data-template-name="index">
{{#each}}
{{#view App.TestView content=this}}
{{this.test}}
{{/view}}
{{/each}}
</script>
App = Ember.Application.create();
function wrap(ob) {
return Ember.Object.create(ob);
}
App.IndexRoute = Ember.Route.extend({
model: function() {
return [
wrap({'test':'1', 'isActive':false}),
wrap({'test' :'2', 'isActive':false}),
wrap({'test': '3', 'isActive':false}),
wrap({'test': '4', 'isActive':false})
];
}
});
App.TestView = Ember.View.extend({
classNames: ["user"],
classNameBindings: ["content.isActive:is-active"],
click: function(e) {
if (e.shiftKey) {
this.get("content").toggleProperty("isActive");
}
}
});
这可以清理一些,但你得到了要点。现场演示here。