【问题标题】:ember app kit, set additional model propertiesember 应用套件,设置附加模型属性
【发布时间】:2014-06-06 13:50:11
【问题描述】:

找到模型后如何添加其他模型属性? (或者如何在 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_id 特定字符串,该字符串不会由 api 服务返回。

api 根据 url /monkeys?monkeyType=someId 返回以下内容

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

【问题讨论】:

    标签: javascript ember.js ember-app-kit


    【解决方案1】:

    也许是这样的?

    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() 返回一个 PromiseArraythen() 只返回一个承诺。

    【讨论】:

    • 感谢您的输入 - 虽然 pageTitle 依赖于 params.gallery_Id,但不是我所追求的,它在从 this.store.find( ... ) 返回后不在模型中
    • 我不明白这是怎么回事。 Javascript 有闭包,由于params.gallery_id 很可能是一个原语,你可以在任何你想要的嵌套函数中使用它。
    【解决方案2】:

    这是我最终得到的结果:

    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 Data 的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多