Javascript 余烬应用程序套件,设置其他模型属性

Javascript 余烬应用程序套件,设置其他模型属性,javascript,ember.js,ember-app-kit,Javascript,Ember.js,Ember App Kit,找到模型后,如何添加其他模型属性?(或者如何在setupController中访问路由的参数 给定路线 this.resource('gallery', { path:'/gallery/:gallery_id' }); 和路由器/routes/gallery.js export default Ember.Route.extend({ model: function(params) { return this.store.find('monkeys', { mo

找到模型后,如何添加其他模型属性?(或者如何在setupController中访问路由的参数

给定路线

   this.resource('gallery', { path:'/gallery/:gallery_id' });
和路由器
/routes/gallery.js

export default Ember.Route.extend({
    model: function(params) {
        return this.store.find('monkeys', { monkeyType: params.gallery_id });
        //can I add an additional property to the returned model here?
    },

    setupController: function(controller, model) {
        var pageTitle = 'something related to params.gallery_id';
        //can I access route params in here?
        this.controllerFor("application").set('pageTitle', pageTitle);
        controller.set('model', model);
    }
});
理想情况下,我希望将应用程序控制器上的
pageTitle
属性设置为某个
gallery\u id
特定字符串,该字符串不是api服务返回的

api根据url
/monkeys?monkeyType=someId

{ "monkeys":[{ ... }, { ... }] }

也许是这样的

export default Em.Route.extend({
    model: function(params) {
        var model = this.store.find('monkeys', { monkeyType; params.gallery_id });

        model.then(function(models) {
            this.controllerFor('application').set('pageTitle', models.get('firstObject.name'));
        }.bind(this));

        return model;
    }
});

请确保您返回的是
model
而不是
then
调用返回的承诺。
store.find()
返回一个
PromiseArray
,而
then()
只返回一个承诺。

以下是我的结论:

export default Ember.Route.extend({
    model: function(params) {
        return return {
            tag:params.gallery_id,
            monkeys:[]
        };
    },
    setupController: function(controller, model) {
        var url = window.ENV.api + 'monkeys?monkeyType=' + model.tag;

        if(model.monkeys.length === 0){
            $.getJSON(url, function(json){
                model.monkeys.pushObjects(json.monkeys);
            });
        }

        this.controllerFor("application").set('pageTitle',
             this.getTitle(model.tag));

        controller.set('model', model);
    },
    getTitle: function(tag){
        //some arbitrary non-api lookup
    }
});

我对这个解决方案不太感兴趣,所以我很高兴听到改进,或者可能是一个使用Ember数据的版本。

感谢您的输入-虽然不是我想要的,因为页面标题依赖于params.gallery_Id,它从
this.store.find()返回后不在模型中
我看不出这是一个什么问题。Javascript有闭包,而且由于
params.gallery\u id
很可能是一个原语,您可以在任何嵌套函数中使用它。