ember.js <button {{action}} =“”> </button>无效

时间:2013-01-18 07:04:08

标签: ember.js

我有http://jsfiddle.net/pF2cF/6/代码有2个问题: 1.单击“MyButton”不会转到App.indexController中的clickButton函数 2.在文本字段中输入将首先触发MyButton点击(如果#1得到解决)

任何人都可以帮忙解决这些问题吗?我确实有一个使用的解决方法,但我不确定使用它有什么问题。

谢谢!

代码片段如下,在2013年1月14日使用其主分支中的ember.js:

    <script type="text/x-handlebars" data-template-name="myTemplate">
        <button {{action clickButton target="App.indexController"}} >MyButton1</button>
        {{view App.MyView placeholder="Input something 1 and enter"}}
    </script>

App = Em.Application.create({
  ready: function () {
  }
});

App.Router.map(function () {
  this.route("index", { path: "/" });  //master 01142013 syntax
});
App.IndexRoute = Ember.Route.extend({
  renderTemplate: function () {
    this.render('myTemplate', {controller: 'indexController'});
  }
});

App.indexController = Ember.Controller.extend({
  clickButton: function () {
    alert("clickButton");
  }
});

App.MyView = Em.TextField.extend({
  insertNewline: function (evt) {
    alert("enter pressed");
  }
});

1 个答案:

答案 0 :(得分:18)

你犯了一些小错误。我已在JSBin上添加了工作版本。

不会导致任何失败的文体问题:

  • 您无需申报任何index路线。
  • ready上不需要空Application方法。通常,将启动逻辑放在ApplicationRoute#setupController中,您也可以访问控制器。
  • 除非您尝试跨多个路线共享单个模板,否则您应该将模板命名为与路径相同的名称。在这种情况下,您应该使用index而不是myTemplate

与失败有关的问题:

  • 控制器名称应大写:App.IndexController而不是App.indexController
  • 如果目标是当前控制器,则不应指定目标。
  • 您的render来电指定{ controller: 'indexController' }。它应该是{ controller: 'index' }