Ember:一个模板的两条路线

时间:2015-04-26 15:14:41

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

我是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');
    }
});

任何帮助都会很棒:)

2 个答案:

答案 0 :(得分:2)

您需要的是扩展您的添加控制器,而不是使用相同的路线。

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(...)
   },
}

希望这有帮助。

答案 1 :(得分:1)

抱歉延迟,谢谢你的回答。这就是我实现目标的方式:

AddRoute:

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
    },
});

EditRoute:

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);
            });
        },
    }
});

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