Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于显示/编辑和创建的相同Ember.JS模板_Ember.js_Ember Router - Fatal编程技术网

用于显示/编辑和创建的相同Ember.JS模板

用于显示/编辑和创建的相同Ember.JS模板,ember.js,ember-router,Ember.js,Ember Router,我正在使用Ember.JS编写CRUD应用程序: 显示“操作”列表 用户可以单击一个动作来显示它,或者单击按钮来创建一个新动作 我希望使用相同的模板来显示/编辑现有模型对象并创建新的模型对象 这是我使用的路由器代码 App = Ember.Application.create(); App.Router.map(function() { this.resource('actions', {path: "/actions"}, function() { this.re

我正在使用Ember.JS编写CRUD应用程序:

  • 显示“操作”列表
  • 用户可以单击一个动作来显示它,或者单击按钮来创建一个新动作
我希望使用相同的模板来显示/编辑现有模型对象并创建新的模型对象

这是我使用的路由器代码

App = Ember.Application.create();

App.Router.map(function() {
    this.resource('actions', {path: "/actions"}, function() {
        this.resource('action', {path: '/:action_id'});
        this.route('new', {path: "/new"});
    });
});

App.IndexRoute = Ember.Route.extend({
    redirect: function() {
        this.transitionTo('actions');
    }   
});

App.ActionsIndexRoute = Ember.Route.extend({
    model: function () {
        return App.Action.find();
    }
});

App.ActionRoute = Ember.Route.extend({
    events: {
        submitSave: function () {
            this.get("store").commit();
        }
    }
});

App.ActionsNewRoute = Ember.Route.extend({
    renderTemplate: function () {
        this.render('action');
    },

    model: function() {
        var action = this.get('store').createRecord(App.Action);       
        return action;
     },

    events: {
        submitSave: function () {
            this.get("store").commit();
        }
    }
});
问题是,当我第一次显示一个动作,然后回来创建一个新动作时,模板似乎没有使用新创建的记录,而是使用以前显示的记录

我的解释是控制器和模板不同步。 你会怎么做? 也许有更简单的方法来实现这一点


这是一个包含代码的JSBin:

通过说
this.render('action')
,您不仅告诉它使用
操作
模板,还告诉它使用
操作控制器
,而实际上您需要
操作
模板,而是使用
操作新控制器

您需要覆盖以下内容:

this.render('action', {
  controller: 'actions.new'
});

.

我现在明白了
ActionsNewRoute
model
功能实际上是将其模型对象注入
ActionsNewController
。我可以记录调用此函数的情况,但看不到创建的对象。你帮助我更好地理解了这个路由器模型。非常感谢你,泰迪:-)