1

我刚刚更新了 Ember,我正在尝试将旧应用程序转换为新的路由器 API。

在我的模板中,我有这个:

<button {{ action "createNewApp" }} class="btn btn-primary">Create application</button>

我在我的路线中放了一个 createNewApp:

App.CreateAppRoute = Ember.Route.extend({
    renderTemplates: function() {
        this.render({ outlet: 'content'});
    },
    createNewApp: function(){
        console.log("It's clicked");
    }
});

但是,当我单击按钮时,该函数永远不会被调用。我试图将事件的目标更改为控制器,但它仍然无法正常工作。这是一个错误还是我做错了什么?

4

1 回答 1

1

我能够使用路由器事件属性中的函数(感谢 sly7_7)或使用控制器中的函数来处理点击:

模板:

<script type="text/x-handlebars" data-template-name="application">
    <h1>Content Here:</h1>
    {{outlet content}}
  </script>

  <script type="text/x-handlebars" data-template-name="content-view">
    <h2>content</h2>
    <button {{ action "createNewApp" }} class="btn btn-primary">Create application</button>
  </script>

JS:

var App = Ember.Application.create();

App.CreateAppView = Ember.View.extend({
    templateName: "content-view"    
});
App.CreateAppController = Ember.Controller.extend({
    createNewApp: function(){
        console.log("It's clicked, controller");
    }
});

App.Router.map(function(match) {
  match('/').to('createApp');
});
App.CreateAppRoute = Ember.Route.extend({
    renderTemplates: function() {
        this.render({ outlet: 'content'});
    },
    events: {
        createNewApp: function(){
            console.log("It's clicked, router");
        }
    }
});

单击按钮时,控制台日志消息为"It's clicked, controller",当控制器中的功能被删除时,该操作由路由器处理,控制台日志消息为"It's clicked, router"。如果在{{action}}Ember 中没有指定目标,则尝试在视图中查找事件,然后是控制器,然后是路由。

这是使用今天从源代码构建的 emberjs 构建。

原答案如下:

{{action}}路由器中的 替换为{{linkTo}}

emberjs.com 指南会不断更新有关新路由器的新信息。链接指南涵盖了{{linkTo}}帮助程序,操作指南讨论了使用{{action}}帮助程序处理模板中的事件。

于 2013-01-02T21:53:09.033 回答