Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 渲染后KnockoutJS从viewModel检索数据问题_Javascript_Knockout.js - Fatal编程技术网

Javascript 渲染后KnockoutJS从viewModel检索数据问题

Javascript 渲染后KnockoutJS从viewModel检索数据问题,javascript,knockout.js,Javascript,Knockout.js,我在使用KnockoutJS1.2.1时有一个非常奇怪的行为(还不能切换到2,或者相信我,我会) 基本上,我在模板上设置了后渲染。在后渲染中,我需要从viewModel检索数据。当我试图在render函数中通过viewModel.stuff()从中获取数据时,会发生strrange行为。它似乎多次调用render或其他东西 这是代码 var viewModel = { stuff: ko.observableArray([{ id : 1, name : 'Thing'},

我在使用KnockoutJS1.2.1时有一个非常奇怪的行为(还不能切换到2,或者相信我,我会)

基本上,我在模板上设置了后渲染。在后渲染中,我需要从viewModel检索数据。当我试图在render函数中通过viewModel.stuff()从中获取数据时,会发生strrange行为。它似乎多次调用render或其他东西

这是代码

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(); 
    });
});
这是小提琴

只要试着在render函数中注释掉var stuff=viewModel.stuff(),并在单击按钮时观察控制台日志中的差异


谢谢你的帮助,因为我知道这个有点奇怪

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

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

看看这里的日期:

我不确定您想要完成的确切操作,但是如果您需要在
afterRender
中完成,并且不需要依赖项,那么您可以在setTimeout 0中执行操作