Javascript knockoutjs afterAdd和afterRender问题
我使用的是一个简单的模板,其中包含一个{{each}}块。每次集合中发生更改时,整个模板都会重新呈现 然后我在模板绑定中附加了afterRender事件。调用的函数只需将焦点设置为新添加的输入元素。工作得很好Javascript knockoutjs afterAdd和afterRender问题,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我使用的是一个简单的模板,其中包含一个{{each}}块。每次集合中发生更改时,整个模板都会重新呈现 然后我在模板绑定中附加了afterRender事件。调用的函数只需将焦点设置为新添加的输入元素。工作得很好 {{each Fabbricati}} <li> <div style="float: left; clear: left;"> {{if Editing}} <input id="editingitem" type="
{{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 id="wrapper" data-bind="template: { name: 'navTemplate', afterRender: Prettify </div>
现在我尝试将{{each}}中的块移动到一个独立的模板,并使用模板绑定中的foreach选项调用它。到目前为止还不错,但这里有一个陷阱:afterRender将不再工作。我的输入无法获得焦点
我已经在互联网上读到,这是一种有意的行为,并打算改用afterAdd,但这并不奏效。“我的美化”功能的效果总是添加到所有元素中,最后添加的元素除外。如果我再加一个,前一个会得到行为,等等
我真的卡住了。如果有人知道如何解决这个问题,那将是一个救命稻草
谢谢。试试这个:
从
将{{each}}与可观察数组一起使用
当使用{{each someArray}}时,如果您的值是一个observearray,则必须通过写入{{each myObservableArray}}而不仅仅是{{each myObservableArray}将基础数组传递给每个数组
因此,请尝试:
{{each Fabbricati()}}
试试这个:
从
将{{each}}与可观察数组一起使用
当使用{{each someArray}}时,如果您的值是一个observearray,则必须通过写入{{each myObservableArray}}而不仅仅是{{each myObservableArray}将基础数组传递给每个数组
因此,请尝试:
{{each Fabbricati()}}
我会试着看一看新版本的淘汰赛。它有一些不同的绑定方法,这些方法更简单,可以更好地满足您的需要。网站上有一系列新功能 我遇到了一些与您的问题类似的问题,但使用了新的控制流绑定,从而大大简化了我的代码。见下文 关于afterRender:
<ul data-bind="foreach: products, afterRender: callback">
<li>
<strong data-bind="text: name"></strong>
—
Last updated: <em data-bind="text: $parent.lastUpdated"></em>
</li>
这与我昨天运行的代码类似。我发现每次生成一行时都会调用afterRender。我想这就是你想要的行为。淘汰赛1.3测试版说明-afterRender&IE9今天有一个问题,因为它将导致一个异常。我将尝试查看Beta版淘汰赛的新版本。它有一些不同的绑定方法,这些方法更简单,可以更好地满足您的需要。网站上有一系列新功能 我遇到了一些与您的问题类似的问题,但使用了新的控制流绑定,从而大大简化了我的代码。见下文 关于afterRender:
<ul data-bind="foreach: products, afterRender: callback">
<li>
<strong data-bind="text: name"></strong>
—
Last updated: <em data-bind="text: $parent.lastUpdated"></em>
</li>
这与我昨天运行的代码类似。我发现每次生成一行时都会调用afterRender。我想这就是你想要的行为。淘汰版1.3测试版说明-afterRender&IE9今天有一个问题,因为它将导致一个异常。似乎你根本没有读过我的帖子。我说用{{each}}语法我一点问题都没有,一切都很好。我的问题是模板:{foreach:Fabbricati}语法。好的。嗯{{each}}和foreach的工作方式不同。{{each}}当某些内容发生更改时,将重新启动整个模板,从而触发afterRender。foreach只删除/添加单个项,不重新提交完整模板,因此在不调用afterRender后它才有意义。你见过这个例子吗?也许你可以试试afterAdd:functionelem{//do your stuff here}语法。同样,如果你读了我的全部文章,我说我尝试了afterAdd,但没有成功。那么如果你使用afterAdd:functionelem{//do your stuff here}语法,elem是什么?它是null还是添加的最后一个元素?另外,请你不要再三地说我没有读过你的帖子——我读过。起初我可能没有领会其中的要点,但我只是想在这里提供帮助,如果能有点礼貌的话,我将不胜感激。谢谢。对不起,我不是故意粗鲁的。在使用JS时,有点太沮丧了。我会尽快发布更多的细节。谢谢。看来你根本没看过我的帖子。我说用{{each}}语法我一点问题都没有,一切都很好。我的问题是模板:{foreach:Fabbricati}语法。好的。嗯{{each}}和foreach的工作方式不同。{{each}}当某些内容发生更改时,将重新启动整个模板,从而触发afterRender。foreach只删除/添加单个项,不重新提交完整模板,因此在不调用afterRender后它才有意义。你见过这个例子吗?也许你可以试试afterAdd:functionelem{//do your stuff here}语法。同样,如果你读了我的全部文章,我说我尝试了afterAdd,但没有成功。那么如果你使用afterAdd:functionelem{//do your stuff here}语法,elem是什么?它是null还是添加的最后一个元素?另外,请你不要再三地说我没有读过你的帖子——我读过。我一开始可能有
我没有领会要点,但我只是想在这里提供帮助,如果有点礼貌的话,我将不胜感激。谢谢。对不起,我不是故意粗鲁的。在使用JS时,有点太沮丧了。我会尽快发布更多的细节。谢谢。请确保您的绑定使用了iObject作为选项,例如Kris,您救了我一天。这让我有一段时间被打败了,我想知道为什么afterRender没有更新。请确保您的绑定使用了一个iObject作为选项,例如Kris,您救了我一天。这让我有一段时间被打败了,我想知道为什么afterRender没有更新。