我在KnockoutJS 1.2.1上有一个非常奇怪的行为(暂时不能切换到2,或者相信我,我会)。
基本上,我在模板上设置了渲染后渲染。在渲染后,我需要从viewModel中检索数据。当我尝试通过render函数中的viewModel.stuff()从中获取数据时,会发生strrrange行为。它似乎是多次调用渲染或其他东西。
这是代码......
var viewModel = {
stuff: ko.observableArray([{ id : 1, name : 'Thing'},
{ id: 2, name : 'Thingier' },
{ id : 3, name : 'Thingiest' }])
};
window.render = function(el){
// This line does weird stuff!!
// Observe the console with and without it
// All I want to do is get my stuff...
var stuff = viewModel.stuff();
console.log(el);
};
var update = function(){
console.log(viewModel);
viewModel.stuff.push({ id : 4, name : 'Thingiestest' });
};
$(function(){
ko.applyBindings(viewModel);
$("#add").click(function(){
update();
});
});
这是小提琴......
http://jsfiddle.net/jcreamer898/wZ5bD/
尝试在渲染功能中注释掉 var stuff = viewModel.stuff(),并在点击按钮时观察控制台日志中的差异。
感谢这里的任何帮助,因为我知道这个有点奇怪!
答案 0 :(得分:0)
绑定在计算的observable内部执行,因此当您在afterRender函数中调用viewModel.stuff()
时,您将在stuff
observable上为每个创建一个依赖项。
添加新项目后,再次呈现每个项目后会调用afterRender
。
查看此处的日期:http://jsfiddle.net/rniemeyer/wZ5bD/4/
我不确定您想要完成的确切事情,但如果您需要在afterRender
中执行并且不想要依赖项,那么您可以在setTimeout 0中执行操作。{ {3}}