ember js - 未调用控制器动作

时间:2015-11-12 04:01:42

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

我有以下控制器代码:

var App = Ember.Application.create();


App.DocumentController = Ember.Controller.extend({  
  actions:{
    test:function(){
      console.log('test');
    }
  }
});

形式如下:

div class="form-horizontal form-group form-group-lg row">
    <div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-1 col-md-5 col-md-offset-2">
      {{input type="text" value=name class="form-control" placeholder="Name of document." autofocus="autofocus"}}
    </div>
    <div class="col-xs-10 col-xs-offset-1 col-sm-offset-0 col-sm-4 col-md-3">
         <button class="btn btn-primary btn-lg btn-block" {{action 'test'}}>Create Document</button>
    </div>

</div>

{{#if responseMessage}}
  <div class="alert alert-success">{{responseMessage}}</div>
{{/if}}

单击按钮时,调试器输出:

没有处理动作'firstAction'。如果您确实处理了该操作,则可以通过从控制器中的操作处理程序返回true来导致此错误,从而导致操作冒泡

不确定问题是什么 - 路线代码:

Router.map(function() {  
  this.resource( 'index', { path: '/' } );
  this.route('decisions');
  this.route('teams');
  this.route('about');
  this.resource("documents",{ path: '/documents' }, function() {            
        this.route('/show', {path: '/show/:id'});
        this.route('/edit', {path: ':id/edit'});
  });
});

型号代码:

import DS from 'ember-data';

export default DS.Model.extend({  
  name: DS.attr('String'),
  url: DS.attr('String'),
  text: DS.attr('String')  
});

我知道ember有一个严格的命名约定,但是我在他们的教程中使用命名约定从ember-cli生成了资源(文档)。如何让模板hbs代码与控制器通信?

2 个答案:

答案 0 :(得分:1)

问题在于我的文件夹结构。因为文档模型有很多不同的模板,所以我决定在模板文件夹中添加一个文档文件夹。我应该对控制器文件夹做同样的事情(即添加一个文件夹)。此外,控制器的文件名必须与模板的文件名相同(在本例中为index.hbs表示模板,index.js表示控制器文件)。

答案 1 :(得分:0)

控制器中操作的名称为test,但您正在调用名称为firstAction的方法,该方法未定义。

尝试以下方法:

 <button class="btn btn-primary btn-lg btn-block" {{action 'test'}}>Create Document</button>