我有一个表中的记录列表。每当双击一行时,我想显示一个编辑器表单。最好但不是必须的,路由操作以使表单具有类似 /songs/edit/:song_id 的 URL。我见过的最类似的示例在#linkTo 括号中包含一些文本或按钮,但是我想从视图中做类似的事情,以便我有一个形式的事件:
App.SongView = Em.View.extend({
doubleClick: function(evt) {
something here;
}
});
我有一个表中的记录列表。每当双击一行时,我想显示一个编辑器表单。最好但不是必须的,路由操作以使表单具有类似 /songs/edit/:song_id 的 URL。我见过的最类似的示例在#linkTo 括号中包含一些文本或按钮,但是我想从视图中做类似的事情,以便我有一个形式的事件:
App.SongView = Em.View.extend({
doubleClick: function(evt) {
something here;
}
});
除了使用 {{linkTo}} 帮助器,您可以使用 {{action}} 帮助器,并指定target=view
(请参阅在视图中处理操作而不是路由器)。
要处理更改 url,您可以调用transitionTo
SongsEdit 路由并将其与参数一起提供。
模板:
{{#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);
}
您的路线当然会负责显示实际的编辑表单。