2014-09-12 76 views
0

我的問題如下:如何在famo.us中加載表面的動態內容(ajax)?

我有許多表面與一個唯一的網址相關聯。當我移動到一個特定的表面時,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

我對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(公司)更喜歡單引號,但是如果您使用雙引號,那就很好。至少堅持兩者中的任何一個,這只是一個更好的做法。

+0

它根據我的需要稍微調整一下後就可以工作了。謝謝。 – 2014-09-13 07:29:15

+1

是的,我後來注意到我搞砸了一些哈哈,但沒有互聯網了編輯評論。我現在會爲其他用戶更新它。 – 2014-09-13 09:41:39