2013-05-08 63 views

回答

2

通常,給定路線有兩種方法:(1)立即進入頁面並在數據可用時填入數據(2)等待數據在過渡之前被提取。

案例1非常簡單。你create模型類的一個實例,調用fetch,並返回它。

var FooRoute = Em.Route.extend({ 
    model: function(params) { 
    var foo = Foo.create({ id: params.id }); 
    foo.fetch(); 
    return foo; 
    }, 

    setup: function(foo) { 
    // foo is a Foo, but may not have its data populated 
    } 
}); 

案例2更復雜,因爲Ember-Resourcefetch方法返回一個帶有兩個參數解析一個承諾 - 底層的JSON數據和模型本身。返回這樣的承諾只會通過第一setup,所以我們要創造我們自己的承諾的Ember.Route

var FooRoute = Em.Route.extend({ 
    model: function(params) { 
    var foo = Foo.create({ id: params.id }), 
     deferred = $.Deferred(); 
    foo.fetch().then(
     function(json, model) { deferred.resolve(model); }, 
     function(error) { deferred.reject(error); } 
    ); 
    return deferred.promise(); 
    }, 

    setup: function(foo) { 
    // foo is a Foo with its data populated 
    } 
}); 
+0

你不需要那麼複雜。 Promise是可鏈接的,Promise的價值是你從成功處理函數返回的東西:'return foo.fetch()。then(function(){return foo;},...);' – cbley 2015-04-08 12:48:37

相關問題