渲染后挖空JS从视图模型中检索数据问题

KnockoutJS After Render retrieve data from viewModel issue

本文关键字:模型 检索 数据 问题 视图 JS      更新时间:2023-09-26

我在进行 KnockoutJS 1.2.1 时有一个非常奇怪的行为(还不能切换到 2,或者相信我会的(。

基本上,我在模板上设置了渲染后。在渲染后,我需要从我的视图模型中检索数据。当我尝试通过渲染函数中的 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((,并在单击按钮时观察控制台日志中的差异。

感谢这里的任何帮助,因为我知道这个有点奇怪!

绑定在计算的可观察量内部执行,因此当您在 afterRender 函数中调用 viewModel.stuff() 时,您正在为stuff可观察量的每个绑定创建一个依赖项。

添加新项时,将在再次呈现每个项后调用afterRender

看看这里的日期:http://jsfiddle.net/rniemeyer/wZ5bD/4/

我不确定您要完成的确切事情,但是如果您需要在afterRender中执行此操作并且不想要依赖项,那么您可以在setTimeout 0中执行操作。 http://jsfiddle.net/rniemeyer/wZ5bD/5/