Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 余烬:单击视图上的事件不触发_Javascript_Ember.js - Fatal编程技术网

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,您可以将一个操作从视图发送到arrayController
    this.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);
      }
    
    });