2014-09-27 39 views
0

所以我有以下型號:如何傳遞DS.PromiseObject作爲鏈接助手中的模型?

var User = DS.Model.extend({ 
    name: DS.attr('string'), 
    defaultRealm: DS.belongsTo('realm', { async: true }) 
}); 

var Realm = DS.Model.extend({ 
    name: DS.attr('string') 
}); 

我的路由器和路由的樣子:

App.Router.map(function() { 
    this.route('index', { path: '/:user_id' }); 
    this.route('realm', { path: '/realms/:realm_id' }); 
}); 

App.UserRoute = Em.Route.extend(
    model: function (params) { 
    return this.store.find('user', params.user_id); 
    }, 
    setupController: function (controller, model) { 
    controller.set('model', model); 
    } 
); 

而且在我的索引模板,我有以下幾點:

{{#link-to 'realm' model.defaultRealm}} 
    Realm 
{{/link-to}} 

現在一切正常如預期的那樣,除了link-to產生像/realms/<App.RealmModel:ember728:541ddd0f29909d0000b6d407>的URL而不是/realms/541ddd0f29909d0000b6d407。它看起來像是序列化模型的id而不是序列化整個DS.Model對象(因爲關係是異步的,所以defaultRealm實際上是PromiseObject)。這裏發生了什麼?

當前的解決辦法:

使用控制器上的觀察者,並在模板中使用realmId。這真的有必要嗎?

App.IndexController = Em.ObjectController.extend({ 
    realmId: null, 
    modelObserver: Em.observer('model', function() { 
    var self = this; 
    self.get('model.defaultRealm').then(function (realm) { 
     self.set('realmId', realm.get('id')); 
    }); 
    }); 
}); 

版本:

ember#1.7.0 
ember-data#1.0.0-beta.10 
handlebars#1.3.0 
+0

我要去承擔鏈接到'realms'是筆誤,應該是鏈接到'realm' – Kingpin2k 2014-09-27 22:52:32

+0

@ Kingpin2k是的,它應該是' realm'。修復。 – 2014-09-28 01:41:29

回答

1

在構建它使用連載鉤找到航線realm_id的URL。您可以通過使用id輕鬆解決此問題,但可能還有其他問題,但以後我將不得不使用它。

{{#link-to 'realms' defaultRealm.id}} 
    Realm 
{{/link-to}} 

例與異步:http://emberjs.jsbin.com/OxIDiVU/1107/edit

+0

使用'defaultRealm.id'得到完全相同的網址:S – 2014-09-28 01:42:38

+0

我拋出了一個工作的例子,可以隨意比較 – Kingpin2k 2014-09-28 03:02:49