【问题标题】:View-targeted action propagating to sibling views以视图为目标的动作传播到同级视图
【发布时间】:2013-11-07 02:11:12
【问题描述】:

我正在尝试实现一个基本表,每个播放器对象有两行。一个是编辑行,填充文本字段,另一个是视图行。

在我的主模板中,我使用 CollectionView 来呈现一组行(玩家是一个集合)

<table>
  {{view Ember.CollectionView contentBinding="players" itemViewClass="App.PlayerView"}}
</table>

然后我定义了一个自定义视图来接收点击操作:

App.PlayerView = Ember.View.extend({
 templateName: 'rosters/player_view',
 isShowVisible: true,
 actions: {
   toggleVisibility: function(){
     this.toggleProperty('isShowVisible');
   }
  }
});

最后,我为视图创建了模板:

{{#if view.isShowVisible}}
  <tr>
    <td>{{view.content.name}}</td>
    <td><a {{action "toggleVisibility" target="view"}}>Edit</a></td>
  </tr>
{{else}}
  <tr>
    <td>{{input type="text" value=view.content.name}}</td>
    <td><a {{action "toggleVisibility" target="view"}}>Done</a></td>
{{/if}}

我想要发生的是,当我按下“编辑”链接时,它会隐藏文本行,并显示输入行。发生的情况是,如果我按下第一个链接,它可以正常工作,但是,假设我按下第 10 个链接,它将隐藏 1-10 的显示行,然后只显示 10 的编辑。这几乎就像事件是从集合传播到兄弟视图,或者它们的属性以某种方式链接?

我尝试在动作上设置“bubble=false”,但这并没有解决任何问题,也没有从我的动作中返回 false,或者阻止在那里传播。动作中的警告语句表明它只被调用一次(因此,每个同级视图都不会调用一次)。我是 Ember 的新手,所以我愿意接受任何关于我做错了什么的建议!

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    这实际上是因为在 else 语句中缺少结束 tr 标记。虽然这是最终的问题,但我认为当 metamorph 删除并添加表行时,浏览器会出现问题,但这可以通过将 tr 标签从 if 语句中拉出来轻松解决。

    http://emberjs.jsbin.com/EXEnUZE/1/edit

    <script type="text/x-handlebars" data-template-name="rosters/player_view">
      <tr>  
        {{#if view.isShowVisible}}
          <td>{{view.content.color}}</td>
          <td><a {{action "toggleVisibility" target="view"}}>Edit</a></td>
        {{else}}
          <td>{{input type="text" value=view.content.color}}</td>
          <td><a {{action "toggleVisibility" target="view"}}>Done</a></td>
        {{/if}}
      </tr>
    </script>
    

    【讨论】:

    • 哎呀...实际上是因为 TR 在标签内。缺少的结束标签只是我对 SO 出错的编辑。我希望我有超过 15 个业力可以给你,我不会很快发现。非常感谢!
    猜你喜欢
    • 2012-11-12
    • 2012-06-13
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2019-04-06
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多