5

我喜欢在渲染一个活跃的模板时提取一些远程数据。由于请求的异步性质,没有数据将其输出。我怎样才能做到这一点?

 var ractive = new Ractive({
    debug: true,
        el: 'container',
        template: '#template',
        data: 
        {   
            chapters:chapters,
                    load_text: function(path)
                    {
                         $.get(path, function( text ) {                            
                             return text;
                          });
                    }                    
        }
 });
4

2 回答 2

13

我想到了几个解决方案;

创建 Ractive 对象,发出请求,然后在有数据时在 ractive 对象上调用“set”。

var ractive = new Ractive({
    debug: true,
    el: 'container',
    template: '#template',
    data: {
        chapters: chapters,
        load_text: ''
    }
});

$.get(path, function( text ) {
    ractive.set('load_text', text);
});

或者,不建议这样做,您可能会导致您的请求变得同步。

var ractive = new Ractive({
    debug: true,
    el: 'container',
    template: '#template',
    data: {
        chapters: chapters,
        load_text: function(path) {
            $.ajax({
                url: path,
                success : function (text) {
                    return text;
                },
                async : false
            });
        }
    }
});
于 2014-04-27T03:13:27.180 回答
0

您的调用$.get没有返回任何值的原因是因为您传递它的函数是回调(作为参数传递给另一个函数的函数,在第一个函数完成时执行,没有阻塞)。

实际的$.get函数什么也不返回。将回调传递给它的原因是,当它完成运行时,它可以调用该回调(将结果$.get作为参数)。此外,除非您ractive.data.load_text()在应用程序的某个地方调用,否则您分配的函数load_text将永远不会运行。

让我担心的是,您发布的代码表明对 Javascript(特别是 Javascript 中的异步操作)的工作原理缺乏了解。我建议对回调做一些阅读(我在下面发布了一些资源)。祝你好运!

javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

recurial.com/programming/understanding-callback-functions-in-javascript/

此外,当你准备好从回调毕业时,这里有一篇关于 jQuery 中的承诺的文章:http: //code.tutsplus.com/tutorials/wrangle-async-tasks-with-jquery-promises--net-24135

于 2014-05-13T23:16:20.123 回答