0

我有一个简单的 Ember 应用程序,但我花了 5 个小时才让 {{action}} 工作,但没有任何运气。我已经尝试了3次我能想到的一切,但我被卡住了。我有最少的路由器。{{outlet}} 中默认显示一个 index.handlebars,并且有一个指向定价页面的链接,当成功点击该链接时会跳转到定价页面。在定价页面中,我尝试使用 a 和 a 来包含一个 {{action showMessage}},它在 PricingController 中有相应的方法。查看 Chrome 中的 ember-extension,我可以看到 PricingController 确实与视图相关联。但是该方法永远不会被调用。我真的不知道还能尝试什么。

application.handlebars:

<div class='navbar navbar-inverse navbar-fixed-top'>
  <div class='navbar-inner'>
    <div class='container'>
      <div class='nav-collapse collapse'>
        <ul class='nav'>
          <li>{{#linkTo 'pricing'}}Prijzen{{/linkTo}}</li>
        </ul>
      </div>
    </div>
  </div>
</div>
<div class='container' id='main'>
  <div class='content'>
    <div class='row'>
      <div class='span12'>
        <div class='page-header'></div>
        {{outlet}}
      </div>
    </div>
  </div>
</div>

App.Router.map(function() {
  this.route('pricing');
});


App.ApplicationRoute = Ember.Route.extend({
});


App.PricingRoute = Ember.Route.extend({
});

定价.车把:

<h1>some text</h1>
<a href="#" {{action showMessage}} class='btn btn-primary btn-large'>order</a>
<button {{action showMessage}}></button>

App.PricingController = Ember.Controller.extend({
  showMessage: function() {
    toastr.info('info');
  }
});
4

2 回答 2

0

您能否检查 JS 控制台以获取线索,我的猜测是这应该抛出“未处理 showMessage”错误。这是因为默认情况下 {{action}} 帮助程序以当前路由而不是控制器为目标

您可以将showMessage函数移动到路线上的事件对象

App.PricingRoute = Ember.Route.extend({
  events: {
    showMessage: function() {
      toastr.info('info');
    }
  }
});

或将动作的目标设置为控制器

<a href="#" {{action showMessage target="controller"}}>Show</a>
于 2013-02-28T12:54:39.493 回答
0

您的代码在最新的 emberRCjs 和 handlebarsrc3 中正常工作。您使用的是哪个版本的 ember 和车把?

于 2013-02-28T14:38:01.427 回答