【问题标题】:Ember : Two route for one templateEmber:一个模板的两条路线
【发布时间】:2015-04-26 15:14:40
【问题描述】:

我是 Ember 的新手,我尝试制作一个简单的 CRUD。 我想要一个用于添加和编辑对象的模板。

这是我的代码:

this.route('foos', {path: '/foos_path'}, function() {
            this.route('edit',{path: '/edit/:foo_id'});
            this.route('add',{path: '/add'});
            this.route('index');
        });

添加功能很好,但我无法使用编辑功能。 这是我的编辑路线。

import Ember from 'ember';

export default Ember.Route.extend({
    title : '',
    model: function(params) {
        this.store.find('foo', params.foo_id).then(function(foo) {
            console.log(this, this.get('title'));
            this.set('title', foo.title);
        });
    },


    renderTemplate: function() {
        this.render('foos.add', {
           into: 'foos',
           controller: 'foos.add'
        });
        this.render('foos/add');
    }
});

任何帮助都会很棒:)

【问题讨论】:

  • “任何帮助都会很棒”它对你有用吗?

标签: ember.js ember-cli ember-router


【解决方案1】:

你需要像这样扩展你的添加控制器,而不是使用相同的路由。

import Ember from 'ember';
import Controller from 'dir/controllers/projects/editController';
// Add controller
export default Controller.extend({

});

编辑和添加模板都可能是这样的

{{!-- your add controller can overwrite your editController objects --}}
{{view 'navbar' navbarParams=controllerRelatedObject}}

{{partial "someform"}} 

<button {{action 'makeEdit' object1 object2}}  class="btn btn-default"> Save </button>

编辑控制器将处理 makeEdit

// Edit controller
actions: {
   makeEdit : function(givenObject, wantedObject){
      Ember.RSVP.all(givenObject.invoke('save)).then(...)
   },
}

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    抱歉耽搁了,感谢您的回答。这就是我实现目标的方式:

    添加路由:

    import Ember from 'ember';
    
    export default Ember.Route.extend({
        model: function() {
            return this.store.createRecord('foo');// This line is need to load a clean model into the template
        },
    });
    

    编辑路线:

    import Ember from 'ember';
    
    export default Ember.Route.extend({
        controllerName : 'foos.add', // Defines addController for edit route
        templateName : 'foos.add', // Defines AddTemplete for edit route
        model: function(params) {
            return this.store.find('foo', params.foo_id); // Loads the foo object inside the template
        }
    });
    

    我的 addTemplate 看起来像这样:

    <div class="row">
        <form class="col s12">
            <div class="row">
                <div class="input-field col s12">
                    {{input placeholder="Foo name" id="foo_name" type="text" class="validate" value=model.title}}
                    <label for="foo_name"></label>
                </div>
                <div class="row">
                    <button class="btn waves-effect waves-light col s12" type="submit" name="save" {{action 'add'}}>Submit
                        <i class="mdi-content-send right"></i>
                    </button>
                </div>
              </div>
        </form>
    </div>
    

    在我的控制器中,我定义了保存操作(可以在路由中定义):

    import Ember from 'ember';
    
    export default Ember.Controller.extend({
        actions: {
            save: function() {
                // The following is not needed now because we load a record on add and edit route.
                /*var foo = this.store.createRecord('foo', {
                    title : this.get('title')
                });*/
                // We can instead save the record directly
                this.get('model').save().then(function() {
                    console.log('Foo save.');
                }).catch(function(error) {
                    console.log('Error : ' + error);
                });
            },
        }
    });
    

    我希望这会对某人有所帮助。

    【讨论】:

    • 这个解决方案看起来很老套。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2018-04-20
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多