0

我有一个表中的记录列表。每当双击一行时,我想显示一个编辑器表单。最好但不是必须的,路由操作以使表单具有类似 /songs/edit/:song_id 的 URL。我见过的最类似的示例在#linkTo 括号中包含一些文本或按钮,但是我想从视图中做类似的事情,以便我有一个形式的事件:

App.SongView = Em.View.extend({
    doubleClick: function(evt) {
        something here;    
    }
});
4

1 回答 1

3

除了使用 {{linkTo}} 帮助器,您可以使用 {{action}} 帮助器,并指定target=view(请参阅在视图中处理操作而不是路由器)。

要处理更改 url,您可以调用transitionToSongsEdit 路由并将其与参数一起提供。

模板:

{{#each record in records}}
   <div class="record" {{action editForm record on="doubleClick" target="view"}}> ... </div>
   ...
{{/each}}

看法:

editForm: function(record){
  // need to use the controller to call transitionToRoute
  this.get('controller').transitionToRoute("songsEdit", record);
}

请注意,您实际上不必在视图中处理此操作;在控制器中处理这个也是有意义的。

或者,如果您想使用内置doubleClick处理程序来处理它,您不需要在模板中指定任何内容,您只需确保您可以访问要传递给的单个记录transitionTo

它可能看起来像:

doubleClick: function(e) {
  record = this.get('controller.content') // or however you're wrapping the underlying record
  this.get('controller').transitionToRoute('editRoute', record);
}

您的路线当然会负责显示实际的编辑表单。

于 2013-05-29T00:58:30.357 回答