【发布时间】:2011-11-21 06:23:19
【问题描述】:
我正在使用一个简单的模板,其中包含一个 {{each}} 块。每当集合中的某些内容发生变化时,整个模板都会重新渲染。
然后我在模板绑定中附加了一个 afterRender 事件。调用的函数将简单地将焦点设置到新添加的输入元素。完美运行。
{{each Fabbricati}}
<li>
<div style="float: left; clear: left;">
{{if Editing}}
<input id="editingitem" type="text" data-bind="value: Name, event: { blur: function() { Editing(false) }, keypress: function(event) { if (event.which == 13) { blur() } return true; } }" />
{{else}}
<span data-bind="click: function() { Editing(true) }">${Name() || 'Senza nome'}</span>
{{/if}}
- <button class="fancybox edit" data-bind="click: function() { Edit(Id()) }">Modifica</button><button class="remove" data-bind="click: Remove">Rimuovi</button>
</div>
</li>
{{/each}}
和调用 div:
<div id="wrapper" data-bind="template: { name: 'navTemplate', afterRender: Prettify </div>
现在我尝试将 {{each}} 中的块移动到独立模板,并使用模板绑定中的“foreach”选项调用它。到目前为止一切都很好,但这里有一个问题:afterRender 将不再工作。我的输入不会获得焦点。
我已经在互联网上读到它是预期的行为,并改用afterAdd,但这也不起作用。我的Prettify 函数的效果总是添加到除了最后一个添加的元素之外的所有元素。如果我添加另一个,前一个会得到行为,等等。
我真的被困住了。如果有人知道如何解决这个问题,那将是一个救命稻草。
谢谢。
【问题讨论】:
标签: javascript mvvm knockout.js