- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 ref
的范围感到困惑属性/绑定(bind)。我有两个具有相同 ref="activeTable"
的 HTML 表,每个表都有多个行,它们都具有相同的 ref="activeRow"
。
查看此 GistRun (下面复制的代码)。
当我单击某行的“编辑”按钮时,将传入对所单击行的引用(无论单击的是表格还是行)。但是当我点击表的添加按钮时,表 B 的引用总是被传入。
为什么 ref
被 activeTable
而不是 activeRow
覆盖?
我目前的解决方案是使用ref="activeTableA"
或ref="activeTableB"
,但我仍然想了解发生了什么。
我怀疑它与 repeat
和/或 click.delegate
有关。也许事件监听器被添加到表和行的不同范围?
<template>
<h4>Table A</h4>
<!-- Note the table ref -->
<table id="tableA" ref="activeTable">
<thead>
<tr>
<th>Foo</th>
<!-- Passing in table ref -->
<th><button click.delegate="addRow(activeTable)">Add</button></th>
</tr>
</thead>
<tbody>
<!-- Note the row ref -->
<tr repeat.for="foo of foos" ref="activeRow">
<td class="editable-cell">${foo.id}</td>
<!-- Passing in row ref -->
<td><button click.delegate="editRow(activeRow)">Edit</button></td>
</tr>
</tbody>
</table>
<h4>Table B</h4>
<table id="tableB" ref="activeTable">
<thead>
<tr>
<th>Bar</th>
<th><button click.delegate="addRow(activeTable)">Add</button></th>
</tr>
</thead>
<tbody>
<tr repeat.for="bar of bars" ref="activeRow">
<td class="editable-cell">${bar.id}</td>
<td><button click.delegate="editRow(activeRow)">Edit</button></td>
</tr>
</tbody>
</table>
</template>
export class App {
foos = [
{id: 0},
{id: 1},
{id: 2},
{id: 3},
{id: 4},
{id: 5},
{id: 6},
{id: 7},
{id: 8},
{id: 9},
];
bars = [
{id: 10},
{id: 11},
{id: 12},
{id: 13},
{id: 14},
{id: 15},
{id: 16},
{id: 17},
{id: 18},
{id: 19},
];
addRow(table) {
console.log("Adding tow to", table);
}
editRow(row) {
console.log('Editing', row);
}
}
最佳答案
ref
允许您将元素作为绑定(bind)上下文中的变量进行引用。通常,您的绑定(bind)上下文和您的页面(或自定义元素)的 View 模型是同一个。但是,当您处理诸如 repeat.for
之类的“模板 Controller ”(添加/删除 DOM 元素的行为)时,可以更改绑定(bind)上下文。在 repeat.for
的情况下,绑定(bind)上下文成为重复器此迭代的特定 item。
因此,您要覆盖页面 VM 上的 activeTable
属性,但是 activeRow
属性会附加到 foos
中的每个项目,并且bars
中的每个项目。这实际上是您想要的行为(关于 activeRow
),因为您可以将该行的特定元素传递给页面 VM 上的函数。对于 activeTable
,您需要为每个表引用使用不同的名称。
关于javascript - Aurelia ref 绑定(bind)范围因元素而异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012455/
我想读取帖子的数据并获取用户 key ,然后通过它进行搜索并同时获取用户数据,我尝试过,但它后退了一步,直到它才显示用户名我执行任何其他操作 这是帖子和经过身份验证的用户的 Firebase 实时数据
您知道是否有办法将 js ref 和 css ref 作为单个 ref 包含在 html 中?通常这些 ref 单独包含在 html head 中,但我的经理想知道下游消费者是否有一种简化的方法将这些
我正在使用 Swing+Clojure 开发一个 GUI 应用程序,它需要各种可变数据(例如滚动位置、用户数据、文件名、选定的工具选项等)。 我至少可以看到三种不同的处理这组数据的方式: 创建对所有数
我正在尝试通过 React 使用 ref 属性。我的浏览器出现奇怪的错误,但我无法弄清楚问题出在哪里。谁能向我解释一下为什么我会收到此错误: Error: Invariant Violation: a
在我的程序中,我有模板类,这些模板类主要是用于特殊目的 std::function 的包装器。最小的例子是: template class Foo { public: exp
如果被引用为参数的对象在函数中被修改,是否使用 ref 有关系吗?下面两个函数有区别吗? void DisposeObject(ClassThing c) { c.Dispose(); } vo
尝试将大型但线性的 svn 存储库迁移到 git。 svn 存储库没有标准布局(主干、分支、标签)...只有主干的一个目录。 Ubuntu 12.4 LTS,git 1.7.9.5。 $ git sv
您现在如何设置动态引用? 我收到一个错误 cannot set property of 'test' undefined ,如果我使用 this.someRef['test'] = ref;}/>
试图理解 gerrit 中的 refs/for/refs/* 功能。这个问题与 refs/for/master 无关。 我们什么时候可以使用这个 refs/for/refs/* 功能。 有人可以为此解
我以不同的方式调用 4 种方法时得到不同的结果: static void Main(string[] args) { var emp = new Employee { Name = "ABC"
假设我有以下内容: var t = typeof(Foo).MakeByRefType(); 有没有办法将结果转换回typeof(Foo)? 老实说,我发现的唯一方法是: var t = typeof
我以下列方式使用 ref。那么当在第 5 种方法中创建一个新对象时,是否会一直访问 main 方法中的原始 emp 并在那里创建一个新对象? 如果是,有没有一种方法可以实现相同的功能而无需多次迭代,即
我在文档的 html 标签内有一些文本。文字看起来像这样 I need this text <ref> Some unwanted text </ref> I need thi
一些背景: 前几天我遇到了一些事情,这让我开始思考嵌套函数调用中的重载解析。考虑以下代码: #include void printer(const int &a) { std::cout <<
如果直接从 this.refs 获取元素对象,那么为什么要使用 ReactDOM.findDOMNode? var HelloMessage = React.createClass({ click:f
我在这里做错了什么,或者从 C# 7.2 开始,不支持通过 ref 返回并允许设置的索引器? 作品: public ref byte this[int index] { get { r
看来我现在几乎每天都在这里问问题。我不确定这是好事还是坏事... 今天的“WTF flavor ”涉及我在使用来自 NI Measurement Studio 对象的函数时完全和完全无能为力。与我之前
这个问题在这里已经有了答案: Does foreach() iterate by reference? (10 个答案) Alternative to using ref in foreach? (
给定一个函数声明 dynamic DoSomething(dynamic inputObject) 我可以用枚举调用它作为inputObject: MyEnum myEnum; myEnum = Do
如果我将数组传递给函数并在函数内对数组进行更改,则函数外部存在的数组会反射(reflect)这些效果。例如: var myArr = [1, 2, 3]; function popAll(arr) {
我是一名优秀的程序员,十分优秀!