2013-07-18 90 views
1

我很新的emberjs,想知道什麼是對付像下面這樣的最佳方式:Emberjs處理異步AJAX的好方法調用

查看:

{{#if model}} 
    <p>I exist</p> 
{{else}} 
    <p>Login first</p> 
{{#if}} 

在我的JS:

App = Em.Application.create({}); 

App.MyRoute = Em.Route.extend({ 
    setupController: function(){ 
    $.get("some/ajax/call",function(data){ 
     controller.set('model', data)}); 
    } 
    } 
}}; 

在上面的例子setupController將完成和閃爍<p>Login First</p>當數據到達的組成AJAX調用它改變<p>I exist</p>我嘗試做這在莫del的結果是一樣的。

目前我使用一些jQuery隱藏和取消隱藏的東西來解決這個問題,但我不認爲是最好的方法?對我來說似乎比較脆弱。任何意見將是真正有用的

感謝

回答

1

可以使用afterModel鉤進行任何檢查。該鉤子與jQuery返回的模型一起觸發,但在setupController之前。

model: function() { 
    return $.get("some/ajax/call",function(data){ 
     return data; 
    } 
}, 

afterModel: function(model) { 
    // if model is not valid 
    // transitionTo another route etc 
} 

請注意,您剛剛從jQuery promise返回data。 Ember明白,當一個承諾被解決的價值是model

+0

Thx。我改變了我所做的。如果模型爲空,則使用after模式渲染另一個模板。所以我不需要任何醜陋的隱藏顯示代碼。 – charleetm