[英]Knockout afterRender fires only once
我有这个简单的ViewModel:
export class ViewModel {
public arr : KnockoutObservableArray<Dtos>;
constructor() {
this.arr = ko.observableArray<Dtos>(null);
ko.applyBindings(this);
this.init();
}
private init() {
var self = this;
ajaxCall().done(item => {
self.arr(item.Dtos);
});
}
public initPlugins() {
jQuery(".external-events > li")
.each(function() {
if ($(this).attr("event-draggable") == "false")
return true;
jQuery(this).draggable({
zIndex: 999,
revert: true, // will cause the event to go back to its
revertDuration: 0 // original position after the drag
});
});
}
}
此虚拟机已应用于此标记:
<ul class="external-events" data-bind="foreach: {arr, afterRender: initPlugins($data)}">
<li event-draggable="false">
<div class="bg-info">
<span data-bind="text: Name"></span>
</div>
<ul class="external-events" data-bind="foreach: moreStuff">
<li>
<div class="bg-info">
<span data-bind="text: Name"></span>
</div>
</li>
</ul>
</li>
</ul>
问题是foreach
绑定的afterRender
事件仅被触发一次,显然是在ko.applyBindings
之后,但是DOM还没有准备好,因此我们无法初始化jQuery.ui
可拖动。
根据Ko文档, afterRender
observableArray
(属于相应的foreach)更改时, afterRender
应该都会触发,但是这种情况不会发生。
最终,在填充数组之后,我通过在ajax.done
初始化可拖动对象ajax.done
,但是我觉得这不是正确的方法,但是问题仍然存在, afterRender
在阵列更新时不触发。
任何想法将不胜感激。
PS:按数组我显然是指ko.observableArray
问题出在你
foreach: {arr, afterRender: initPlugins($data)}
afterRender
需要一个函数作为参数,但是您正在通过使用数据作为参数来调用该函数,将其更改为:
foreach: {arr, afterRender: initPlugins }
afterRender
后将使用2个参数调用afterRender
方法:
插入的DOM元素的数组,将它们绑定到的数据项
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.