【问题标题】:Ember: click event on a view not firingEmber:未触发的视图上的单击事件
【发布时间】:2014-03-29 02:53:38
【问题描述】:

我有一个race-items 列表,每个都呈现为一个视图:

        <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>

在视图类中,我想使用点击事件来切换属性:

App.RaceItemView = Ember.View.extend({
    tagName: 'li',
    templateName: 'raceItem',
    classNameBindings: ['isSelected:selected'],
    isSelected: false,
    click: function(e) {
        this.set('isSelected', true);
    }
});

这个点击事件似乎不会触发,除非它是通常处理点击的 DOM 元素(abutton 等)。

我怎样才能在我的li 上获得点击触发?我将所有内容都包装在锚点中,因为子元素具有自己的事件和动作。

后续问题:似乎即使我的点击工作正常,它只会将当前视图的 isSelected 属性设置为 true,但不会将其余视图属性切换为 false。实现这一点的提示?

谢谢。我快死了。

【问题讨论】:

  • 点击事件应该在
  • 和其他通常不可点击的元素上起作用。你能重现一个基本的小提琴来证明这一点吗?您可以使用这个小提琴作为基础:jsfiddle.net/NQKvy/790
  • 要将其余视图属性切换为 false,您可以将视图中的操作发送到 arrayController this.get('controller').send('selected'),您可以在其中设置父 arrayController 中的选定项。观察该属性的变化并将所有其他项目设置为false。我可以举一个例子,如果你有一个小提琴可以解决另一个问题,或者最好将它作为一个单独的问题提出,这样人们就可以回答一个或另一个。
  • 我无法在垃圾箱中重现该问题。我对 Ember 很陌生,因为数据设置不同(我使用的是本地存储适配器),所以我无法渲染任何东西。无论如何,我的
  • 上的点击事件肯定不会触发(甚至不会将任何内容记录到控制台)。这可能与我使用render 有关吗?我已经尝试剥离模板以删除所有其他操作和事件,但它似乎没有任何区别。
  • 标签: javascript ember.js


    【解决方案1】:

    点击事件应该适用于所有元素,包括 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);
      }
    
    });
    

    这是一个工作示例:http://jsbin.com/tolod/2/edit?html,js,output

    【讨论】:

    • 谢谢!您的 jsbin 示例运行良好。我将 {{render}} 助手更改为 {{view}} 助手并使用父控制器来处理 itemSelected 操作。不知道为什么 {{render}} 不起作用。
    • 这是一个带有 {{render}} 的工作版本。渲染在幕后为 itemview 创建了一个控制器,因此具有允许您将选择作为模型传递的额外好处。单击选项时查看控制台。 jsbin.com/diwew/3/edit
    • 很好的例子,谢谢,但是当我使用 {{render}} 时,视图上的点击事件仍然不起作用。我确定您的示例是正确的,但我的代码肯定有一些我不知道且无法交流的不同之处。
    • 但是我使用 {{render}} 提供的示例有效吗?这绝对是您环境中的某些东西;可能是 Ember 的版本?获得帮助的最佳方法是在 JSBin 中重现该问题。您可能只加载模板而不是带有渲染语句的视图。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签