如何在famo.us中为表面加载动态内容(ajax)?

时间:2014-09-12 15:11:16

标签: javascript ajax famo.us

我的问题如下:

我有许多表面与一个唯一的网址相关联。当我移动到特定表面时,必须实时触发url(ajax),并且应将响应设置为曲面的内容。

当我尝试执行上述操作时,它实际上会在应用初始化时预先加载所有网址及其内容。这会减慢整个过程,而不是我想要的。我只想在用户在该表面上处于活动状态时加载内容。

var ajaxContent = "";
$.ajax({
  url: 'ajax/article.php?url='+escape(this.options.url),
  async: false,
  success: function(data) {
    ajaxContent = data;
  }
});

this.pageSurface = new Surface({
    size: [undefined, undefined],
    content: ajaxContent,
    classes: ["page"],
    properties: {
        backgroundColor: '#111111',
        fontSize: '16px'
    }
});

以上代码位于曲面循环中。

1 个答案:

答案 0 :(得分:1)

我没有使用Ajax的经验,但据我所知,基于你的描述基本上你是异步请求数据......所以我会根据这个假设回答。

首先,我会稍微改变操作顺序!

for (var i = 0; i < 10; i++) {
    var surface = new Surface({
        content : '',
        classes : ['page'],
        properties : {
            backgroundColor : '#111111',
            fontSize : '16px'
        }
    });

    var ajax_request = {
        url : 'ajax/article.php?url=' + escape(this.options.url),
        async : true,
        success : function(data) {
            //possibly validate the obtained data further
            this.setContent(data);
        }.bind(surface)
    }

    var load = function load() {
        this.removeListener('mouseover', load);
        $.ajax(ajax_request);
    }.bind(surface);

    surface.on('mouseover', load);
}

我将表面绑定到特定于该表面的所有函数,否则可能会在循环内发生奇怪的事情。这将确保只有一个表面加载内容,并且内容仅分配给同一个表面!

最后,您应该注意单引号和双引号,因为您同时使用它们。 Famo.us(该公司)更喜欢单引号,但如果你使用双引号就好了。至少坚持两者中的任何一个都是一种更好的做法。