2013-05-08 87 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