我喜欢在渲染ractive模板时提取一些远程数据。由于请求的异步性质,没有数据使其成为输出。我怎样才能做到这一点?
var ractive = new Ractive({
debug: true,
el: 'container',
template: '#template',
data:
{
chapters:chapters,
load_text: function(path)
{
$.get(path, function( text ) {
return text;
});
}
}
});
答案 0 :(得分:12)
我想到了几个解决方案;
创建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
});
}
}
});
答案 1 :(得分:1)
你对$.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